验证码模块:行为验证码
简介
continew-starter-captcha-behavior
是 ContiNew Starter 验证码模块针对行为验证码的默认处理,底层基于 AJ Captcha。
xml
<dependency>
<groupId>top.continew</groupId>
<artifactId>continew-starter-captcha-behavior</artifactId>
</dependency>
主要特性
- 版本锁定:涉及依赖已进行版本锁定,使用时无需配置版本
- 提供两种行为验证支持方式
- 滑动验证(滑动滑块至图片的具体位置)
- 点选验证(按照程序指定顺序依次点击图片中的文字)
配置示例
配置详情请查看:top.charles7c.continew.starter.captcha.behavior.autoconfigure.BehaviorCaptchaProperties
。
yaml
--- ### 验证码配置
continew-starter:
captcha:
## 行为验证码
behavior:
enabled: true
# 验证码类型
# 默认:BLOCKPUZZLE(滑动验证码)
# 如果值为为 DEFAULT,则 BLOCKPUZZLE(滑动验证码) CLICKWORD(点选验证码) 都会实例化
type: BLOCKPUZZLE
# 缓存类型 支持自定义(默认:LOCAL(程序内存))
# 对于分布式部署的应用,建议使用 REDIS
cache-type: REDIS
# 自定义缓存实现接口(注:当 cache-type 为 CUSTOM 时必填,且才会生效
# 具体实现可参考 top.charles7c.continew.starter.captcha.behavior.impl.BehaviorCaptchaCacheServiceImpl)
cacheImpl: CustomCacheImpl
# 滑动拼图底图路径(为空则使用默认底图)
# 支持全路径
# 支持项目路径,以 classpath: 开头,取 resource 目录下路径,例:classpath:images/jigsaw
# 如果使用自定义图片后,路径下需要有两个文件夹
# original(存放底图)
# slidingBlock(存放滑块)
jigsawBaseMapPath: classpath:images/jigsaw
# 点选文字底图路径(为空则使用默认底图)
# 这个只需要有一个路径集合
# 支持全路径
# 支持项目路径,以 classpath: 开头,取 resource 目录下路径,例:classpath:images/pic-click
picClickBaseMapPath: classpath:images/pic-click
# 右下角水印文字(我的水印)
# 注:这里用的是 Yml 格式的配置文件不需要做编码转换,如果项目中使用的 Properties 格式的配置文件,汉字统一使用 Unicode 可通过下面这个连接进行转换或者自行转换
# 中文转 Unicode: https://tool.chinaz.com/tools/unicode.aspx
water-mark: 你的水印
# 右下角水印文字字体(不配置时,默认使用文泉驿正黑)
# 由于宋体等涉及到版权,原作者 Aj-Captcha 在 jar 中内置了开源字体【文泉驿正黑】
# 方式一:直接配置 OS 层的现有的字体名称,比如:宋体
# 方式二:自定义特定字体,请将字体放到工程 resources 下 fonts 文件夹,支持 ttf\ttc\otf 字体
# aj.captcha.water-font=WenQuanZhengHei.ttf
waterFont: WenQuanZhengHei.ttf
# 校验滑动拼图允许误差偏移量(默认:5像素)
slipOffset: 5
# 历史数据清除开关(0:关闭;1:开启)
historyDataClearEnable: 0
## 接口限流相关
# 一分钟内接口请求次数限制开关(0:关闭;1:开启)
# 开启后所有验证码相关接口将限制一分钟内请求次数
reqFrequencyLimitEnable: 0
# 一分钟内验证码最多失败次数限制(默认:5次)
reqGetLockLimit: 5
# 一分钟内验证码最多失败次数限制达标后锁定时间(默认:300秒)
reqGetLockSeconds: 300
# 获取验证码接口一分钟内请求次数限制(默认:100次)
reqGetMinuteLimit: 100
# 校验检验码接口一分内请求次数限制(默认:100次)
reqCheckMinuteLimit: 100
# 二次校验检验码接口一分钟内请求次数限制(默认:100次)
reqVerifyMinuteLimit: 100
## 其他
# Local 缓存的阈值(默认:1000个)
# 注:只有当 cache-type 的值为 LOCAL 次参数才会生成
cacheNumber: 1000
# 定时清理过期 Local缓存(默认:180秒)
timingClear: 180
# 滑块验证码滑块干扰项(默认:0)
# 注:只有当 type 值为 BLOCKPUZZLE 此参数才生效
interferenceOptions: 0
# 点选字体样式(默认:BOLD)
fontStyle: Font.BOLD
# 点选字体大小(默认:25)
fontSize: 25
获取验证码
可参考 top.charles7c.continew.admin.webapi.common.CaptchaController
类中 getBehaviorCaptcha
方法
请求参数
json
{
"captchaType": "blockPuzzle", //验证码类型 blockPuzzle(滑动验证) clickWord(点选验证)
"clientUid": "唯一标识" //客户端UI组件id,组件初始化时设置一次,UUID(非必传参数)
}
返回参数
json
{
"secretKey": "oRnD35nHUCDr8RU2",
"originalImageBase64": "底图base64",
"point":
{
"x": 205,
"y": 5
},
"jigsawImageBase64": "滑块图base64",
"token": "52dc607d50684395aa0a16b285964e58"
}
接口示例
java
// 项目中注入 CaptchaService 验证码服务类即可使用
private final CaptchaService captchaService;
@GetMapping("/get")
public Object get(CaptchaVO captchaReq, HttpServletRequest request) {
// 这里设置 BrowserInfo 为后续做接口请求限制做唯一标识,保证值唯一即可,如果请求参数中携带了 clientUid 参数则此行代码可以删除
captchaReq.setBrowserInfo(JakartaServletUtil.getClientIP(request) + request.getHeader(HttpHeaders.USER_AGENT));
return captchaService.get(captchaReq).getRepData();
}
校验验证码
可参考 top.charles7c.continew.admin.webapi.common.CaptchaController
类中 checkBehaviorCaptcha
方法
请求参数
json
{
"captchaType": "blockPuzzle",
"pointJson": "QxIVdlJoWUi04iM+65hTow==", //aes加密坐标信息
"token": "71dd26999e314f9abb0c635336976635" //get请求返回的token
}
返回参数
json
{
"captchaType": "blockPuzzle",
"token": "71dd26999e314f9abb0c635336976635",
"result": true,
"opAdmin": false
}
接口示例
java
// 项目中注入 CaptchaService 验证码服务类即可使用
private final CaptchaService captchaService;
@PostMapping("/check")
public Object check(@RequestBody CaptchaVO captchaReq) {
return captchaService.check(captchaReq);
}
核心依赖
依赖 | 描述 |
---|---|
continew-starter-cache-redisson | |
captcha | AJ-Captcha(行为验证码,包含滑动拼图、文字点选两种方式,UI支持弹出和嵌入两种方式) |