17 Star 54 Fork 25

有理想的鱼 / ymate-module-captcha

Create your Gitee Account
Explore and code with more than 12 million developers,Free private repositories !:)
Sign up
Clone or Download
contribute
Sync branch
Cancel
Notice: Creating folder will generate an empty file .keep, because not support in Git
Loading...
README
Apache-2.0

YMATE-MODULE-CAPTCHA

Maven Central status LICENSE

基于 YMP 框架实现的验证码模块,支持图片、邮件和短信三种验证类型,采用注解验证,配置简单、灵活,可自定义扩展,主要特性如下:

  • 支持图片、邮件和短信三种验证类型;
  • 支持多作用域验证码生成;
  • 支持 debug 模式,该模式下短信不会被发送;
  • 支持根据限定条件判断是否启用验证码,如:请求 n 次后需要填写验证码;
  • 采用 @VCaptcha 注解验证,配置简单、灵活,可自定义扩展;

Maven包依赖

<dependency>
    <groupId>net.ymate.module</groupId>
    <artifactId>ymate-module-captcha</artifactId>
    <version>2.0.0</version>
</dependency>

模块配置参数说明

#-------------------------------------
# module.captcha 模块初始化参数
#-------------------------------------

# 验证码模块模块是否已启用(禁用后将忽略所有验证码相关参数验证), 默认值: true
ymp.configs.module.captcha.enabled=

# 是否开启调试模式(调试模式下控制台将输出生成的验证码, 同时短信验证码也不会被真正发送), 默认值: false
ymp.configs.module.captcha.dev_mode=

# 开启验证码类型, 取值范围: ALL|DEFAULT|SMS|MAIL, 默认值: ALL
ymp.configs.module.captcha.captcha_types=

# 验证码服务提供者类, 默认值: net.ymate.module.captcha.impl.DefaultCaptchaProvider
ymp.configs.module.captcha.provider_class=

# 自定义验证码生成器类, 默认值: 空
ymp.configs.module.captcha.token_generator_class=

# 验证码存储适配器类, 默认值: net.ymate.module.captcha.impl.DefaultCaptchaStorageAdapter
ymp.configs.module.captcha.storage_adapter_class=

# 作用域标识扩展处理器, 开启错误记数时为必须, 默认值: 空
ymp.configs.module.captcha.scope_processor_class=

# 手机短信或邮件验证码发送服务提供者类, 默认值: net.ymate.module.captcha.impl.DefaultCaptchaSendProvider
ymp.configs.module.captcha.send_provider_class=

# 设置在达到指定错误次数上限后开启验证码, 默认值: 0, 表示不开启错误记数特性
ymp.configs.module.captcha.need_captcha_wrong_times=

# 缓存名称前缀, 默认值: ""
ymp.configs.module.captcha.cache_name_prefix=

# 验证码最小字符长度, 默认值: 4
ymp.configs.module.captcha.token_length_min=

# 验证码超时时间, 单位: 秒, 默认: 空, 空或小于等于0均表示不限制
ymp.configs.module.captcha.token_timeout=

# 默认验证码控制器服务请求映射前缀(不允许'/'开始和结束), 默认值: ""
ymp.configs.module.captcha.service_prefix=

# 是否注册默认验证码控制器, 默认值: false
ymp.configs.module.captcha.service_enabled=

# 高度, 默认: 70px
ymp.configs.module.captcha.height=

# 宽度, 默认: 200px
ymp.configs.module.captcha.width=

# 前景色, RGB值, 如: 0,0,0|1,2,3, 多个颜色用'|'分隔, 默认: 随机
ymp.configs.module.captcha.foregrounds=

# 背景色, RBG值, 默认: 255,255,255
ymp.configs.module.captcha.background=

# 质量, 可选值: min|default|max, 默认: max
ymp.configs.module.captcha.quality=

# 压缩比, 0-1之间, 默认: 空
ymp.configs.module.captcha.compress_ratio=

# 图片格式, 可选值: png|jpeg, 默认: jpeg
ymp.configs.module.captcha.format=

# 自定义字体配置分析器, 可选参数, 默认值: net.ymate.module.captcha.impl.DefaultCaptchaFontsParser
# 若希望通过指定文件加载字体, 请使用: net.ymate.module.captcha.impl.FileCaptchaFontsParser
# 或通过实现net.ymate.module.captcha.ICaptchaFontsParser接口自定义加载方式
ymp.configs.module.captcha.fonts_parser_class=

# 自定义字体, 可选参数, 格式: [字体名称:SansSerif],[字体样式:plain|bold|italic], 多个字体用'|'分隔, 默认: 随机
# 当自定义字体配置分析器为通过文件加载时, 配置格式: [字体格式:type1|truetype],[字体样式:plain|bold|italic],<文件路径:${root}/fonts/SansSerif.ttf>, 多个字体用'|'分隔
ymp.configs.module.captcha.fonts=

# 图片生成效果参数设置: 缩放, 取值范围: [0-1, 0-1], 默认: 1,1
ymp.configs.module.captcha.effect.scale=

# 图片生成效果参数设置: 波浪, 默认值: true
ymp.configs.module.captcha.effect.ripple=

# 图片生成效果参数设置: 模糊, 默认值: true
ymp.configs.module.captcha.effect.blur=

# 图片生成效果参数设置: 轮廓, 默认值: false
ymp.configs.module.captcha.effect.outline=

# 图片生成效果参数设置: 旋转, 默认值: true
ymp.configs.module.captcha.effect.rotate=

使用方法说明

在 Web 环境下,当配置 service_enabled=true 时,模块将在初始化时注册默认验证码控制器,该控制器提供以下接口能力:

获取验证码图片

http://<你的域名>/captcha?scope=<SCOPE>&type=<TYPE>

参数说明:

  • scope:作用域标识,用于区分不同客户端及数据存储范围,必选参数;

  • type:取值范围:data|json,采用Base64编码输出图片,默认为空,可选参数;

发送短信验证码

http://<你的域名>/captcha/sms_code?scope=<SCOPE>&mobile=<MOBILE>&captcha=<CAPTCHA>

参数说明:

  • scope:作用域标识,用于区分不同客户端及数据存储范围,必选参数;

  • mobile:手机号码,必选参数;

  • captcha:图片验证码(通过http://<你的域名>/captcha?scope=<SCOPE>获取)

返回值说明:

{ret: 0}
  • 0 表示发送成功
  • -1 表示参数验证错误
  • -6 表示发送频率过快或其它消息
  • -50 表示发送异常

发送邮件验证码

http://<你的域名>/captcha/mail_code?scope=<SCOPE>&email=<EMAIL>&captcha=<CAPTCHA>

参数说明:

  • scope:作用域标识,用于区分不同客户端及数据存储范围,必选参数;

  • email:邮件地址,必选参数;

  • captcha:图片验证码(通过http://<你的域名>/captcha?scope=<SCOPE>获取)

返回值说明:

{ret: 0}
  • 0 表示发送成功
  • -1 表示参数验证错误
  • -6 表示发送频率过快或其它消息
  • -50 表示发送异常

检查验证码是否合法

http://<你的域名>/captcha/match?scope=<SCOPE>&token=<TOKEN>&target=<TARGET>

参数说明:

  • scope:作用域标识,用于区分不同客户端及数据存储范围,必选参数;

  • token:预验证的令牌值,必选参数;

  • target:当验证手机或邮件时必须指定对应的手机号或邮箱地址;

返回值说明:

{ret: 0, matched: true|false}

示例代码

验证码注解 @VCaptcha 的使用

@RequestMapping(value = "/login", method = Type.HttpMethod.POST)
public IView login(@VCaptcha(invalid = true)
                   @RequestParam String captcha, // 验证码

                   @VRequired
                   @VMobile
                   @RequestParam String mobile, // 手机号码

                   @VRequired
                   @RequestParam String scope, // 短信验证码作用域标识

                   @VRequired
                   @VCaptcha(type = ICaptcha.Type.MAIL, scopeName = "scope", targetName="mobile")
                   @RequestParam String smscode, // 短信验证码

                   @VRequired
                   @RequestParam String passwd, // 登录密码

                   @RequestParam(Optional.REDIRECT_URL) String redirectUrl) throws Exception {
    // ...... 省略
    return WebResult.success().toJsonView();
}

验证码相关方法调用

// 生成作用域为user.login.xxx的验证码
String code = Captcha.get().generate("user.login.xxx");

// 销毁作用域为user.login.xxx的验证码
Captcha.get().invalidate("user.login.xxx");

// 判断是否开启错误记数,开启后将支持跳过参数验证
Captcha.get().isWrongTimesEnabled();

// 判断作用域为user.login.xxx的验证码是否允许忽略
Captcha.get().isValidationNeedSkip(ICaptcha.Type.DEFAULT, "user.login.xxx");

// 重置作用域为user.login.xxx的验证码错误计数器
Captcha.get().resetWrongTimes(ICaptcha.Type.DEFAULT, "user.login.xxx");

// 验证作用域为user.login.xxx的验证码是否匹配以及验证后是否使其失效
Captcha.get().validate("user.login.xxx", code, true);

One More Thing

YMP 不仅提供便捷的 Web 及其它 Java 项目的快速开发体验,也将不断提供更多丰富的项目实践经验。

感兴趣的小伙伴儿们可以加入官方 QQ 群:480374360,一起交流学习,帮助 YMP 成长!

如果喜欢 YMP,希望得到你的支持和鼓励!

Donation Code

了解更多有关 YMP 框架的内容,请访问官网:https://ymate.net

Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS APPENDIX: How to apply the Apache License to your work. To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. Copyright [yyyy] [name of copyright owner] Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

About

基于 YMP 框架实现的验证码模块,支持图片、邮件和短信三种验证类型,采用注解验证,配置简单、灵活,可自定义扩展。 expand collapse
Java
Apache-2.0
Cancel

Releases (2)

All

Contributors

All

Activities

Load More
can not load any more
Java
1
https://gitee.com/suninformation/ymate-module-captcha.git
git@gitee.com:suninformation/ymate-module-captcha.git
suninformation
ymate-module-captcha
ymate-module-captcha
master

Search