主题
验证码验证拦截器
WARNING
对接口进行图片验证码验证。
支持功能:
- 验证图片验证码
配置
参数说明
配置后,对需要验证的地址进行验证拦截
enabled
:是否启用拦截器,默认不启用false
items
:规则列表,可以配置多个generate-urls
:生成验证码的接口地址verify-urls
:需要验证的接口地址business-key
:业务key,当需要区分业务时,需要配置,通过业务key进行隔离parameter-type
:获取参数类型,header
请求头,query
查询参数,body
code-field-name
:临时code的参数名称value-field-name
:验证码值的参数名称expire
: 过期时间,默认5分钟,可以配置秒,分钟,小时,天,例如:PT30M
30分钟,PT2H
2小时,参考说明captcha-type
:验证码类型,custom
自定义,调用接口verify-type
^1.4.0:验证类型,ordinary
常规的方式(通过生成验证码值,然后保存验证码值,最后验证是否匹配),servlet
调用接口验证(自定义接口验证),tencent
腾讯云验证码,aliyun
阿里云验证码,默认ordinary
verify-uri
^1.4.0:验证uri地址verify-timeout
^1.4.0:验证超时时间,默认1分钟,可以配置秒,分钟,小时,天,例如:PT30M
30分钟,PT2H
2小时,参考说明verify-params
^1.4.0:需要验证传输参数信息(key value方式),定义后,会将所有的参数传入接口地址rate-limiter
^1.4.0:是否限流使用(配置后,验证通过将会自动删除当前限流信息),默认不启用false
示例
生成图片验证码方式
网关配置
yaml
wueasy:
gateway:
filter:
captcha:
enabled: true #是否启用,默认false
items:
- generate-urls:
- /demo/captcha #生成图片验证码接口地址
verify-urls:
- /demo/login #需要验证图片验证码接口地址
code-field-name: code #验证码临时code参数名称
value-field-name: captcha #验证码值参数名称
parameter-type: body #验证码取值参数类型
特殊说明:需要注意接口登录权限的处理
验证码接口
- 登录接口
/demo/login
需要图片验证码 - 通过访问生成验证码接口
http://127.0.0.1:8080/demo/captcha
,接口返回ResultVo<CaptchaVo>
- 生成验证码代码
java
@PostMapping(value = "/captcha", produces = MediaType.APPLICATION_JSON_VALUE)
public Mono<ResultVo<CaptchaVo>> captcha() {
AbstractCaptcha captcha = CaptchaUtil.createLineCaptcha(150,60,5,150);
captcha.setGenerator(new RandomGenerator("23456789ABCDEFGHJKLMNPQRSTUVWXYZ",5));
String captchaCode = captcha.getCode();
CaptchaVo vo = new CaptchaVo();
//验证码值
vo.setCode(captchaCode);
//验证码图片
vo.setCaptcha(captcha.getImageBase64Data());
return Mono.just(ResultVo.ok(vo));
}
- 验证码返回数据
json
{
"errorNo":0,
"data":
{
"code":"88e8d3552ed0d2b8467bc5e497614e69",
"captcha":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJYAAAAoCAIAAACTo5SwAAADMElEQVR42u3asWuVMRAA8PePufoHdFXpooh0VWihiwUnXVwc3tPBwUXU0oKCxUFQFBQnF4cHDoIIYhfdXwMH4cgll0tyyZev5rih330p79Ef+XLJ18WGjQ/fP9rcjOgyFrwfczmid0Iv2FAchCNaETJUQ3EQjhiEI84T4eHfZzYH4czaGcr230JqEt7eu+Sk1rdc7uziPLi+zdA6g00KP+XhjftOCoeFRgrj0ZOVk8KRylt76jcJobmVTUh5SqRLCEOKyYQb8QGb10+LkJKAk3dkbcI2fl7C0IBF+Z+4qp+XEKjoWljoFxVS92MIqWItwpBfbUKwwR0pM6xE8ZwTOmDtCaNjooRHRy9wMoQ1/CYm5P3qLYRahNbMKd7Z2qNU+PLe1q7JT8dPISv5OU6M7kLFr9kUxJVCP+ZDqSL2c+ZfiSKFaUTopWpPGL0MEfJ+MOe8itSvUDFKaLXUCBmnuRBG/RjFBoRJxWTC/ZsXbDpIO1cuQtZeCPnuRvIgLST0Ds4jlE84vtMREf45XQKbTVMxCXdfPj6xdVCsNwVDhMx4RUKvlu4UlLQ50jNS7Bfa/xlXPPOwonAuvv+9xtkPIW1qsBlOxV5mAkLq59SjfnwlRJJa1yXUiqaEofMXnjDVj9YlVBLyDEUzpsZGXkiYtOUXrYW2hcGPUO9TVJFQuJFP9ZMoTu6XdPyd0JFCC+M0Mt7tBNTrEcp7n+jRWqhYQnj45hhnHqH8JVTpMTduRyElfpK1sDZh6IxU+NaJ8YtW+iKETSF+hCb9LtORtiHMeF+R5Beqd0Ro5SBV1okvv97evXoNEjyef/4HWe538u6UZlU/elf4bxbCkcrvC8vxTGISo3hw+ZYdEFKUEHq1vLeSCJc/X9HkFfsiVAzAcwLM8C1mLvKTT2UMxfNOQS8kP02zo2tCq+XcylBUJ3SEvDySMYMwTVH4IB2ECmuhpXIqJYTydmYQ6kCaDFElEf5YfcWp+D3HWhiPckJqpqso70hV/F6vH0DOhtCrVeJXSTFja5/n5/25d0LHrNyvvaK6n1OZASHI8acz/RBuZMfcWoTfVut5EGbEhITqQf1s3RCeAa0b9swfeTD/AAAAAElFTkSuQmCC"
}
}
- 登录接口
http://127.0.0.1:8080/demo/login
传入附加验证码参数 - 登录接口传入数据
json
{
"accountNo":"admin",
"password":"123456",
"code":"88e8d3552ed0d2b8467bc5e497614e69", //验证码临时code
"captcha":"4myn" //验证码值
}
自定义验证码方式^1.3.1
网关配置
yaml
wueasy:
gateway:
filter:
captcha:
enabled: true #是否启用,默认false
items:
- verify-urls:
- /demo/login #需要验证图片验证码接口地址
parameter-type: body #验证码取值参数类型
verify-type: servlet #指定验证类型
verify-uri: lb://web1/verifyCaptcha #负载均衡方式调用自定义接口
#verify-uri: http://127.0.0.1:8081/verifyCaptcha #指定接口地址方式调用自定义接口
verify-params: #需要验证传输的参数
code : code
captcha : captcha
特殊说明:需要注意接口登录权限的处理
验证接口
- 登录接口
/demo/login
传入验证 - 自定义验证验证码接口,必须使用
body
接收参数,并且是post
请求 - 验证验证码代码(自定义逻辑处理)
java
@PostMapping(value= "/verifyCaptcha",produces = MediaType.APPLICATION_JSON_VALUE)
public Mono<ResultVo<Void>> verifyCaptcha(@RequestBody @Valid DataMap map)
{
//TODO 自定义处理
System.err.println("接收到参数:"+JsonHelper.toJsonString(map));
System.err.println("接收到用户信息:"+JsonHelper.toJsonString(UserHelper.getSystemParameter()));
return Mono.just(ResultVo.ok());
}
- 登录接口
http://127.0.0.1:8080/demo/login
传入附加验证码参数 - 登录接口传入数据
json
{
"accountNo":"admin",
"password":"123456",
"code":"88e8d3552ed0d2b8467bc5e497614e69", //验证码临时code
"captcha":"4myn" //验证码值
}
腾讯云验证码方式^1.3.1
网关配置
参考地址;https://cloud.tencent.com/document/product/1110/75489
yaml
wueasy:
gateway:
filter:
captcha:
enabled: true #是否启用,默认false
items:
- verify-urls:
- /demo/login #需要验证图片验证码接口地址
parameter-type: body #验证码取值参数类型
verify-type: tencent #指定验证类型
verify-params: #需要验证传输的参数
secretId: aa #秘钥信息
secretKey: bv #秘钥信息
captchaAppId: 197894 #验证码应用ID
appSecretKey: sddsdsd #验证码应用密钥
randstr: randstr #随机字符串,指定对应的获取参数名称
ticket: ticket #用户验证票据,指定对应的获取参数名称
region: ap-guangzhou #地域
特殊说明:需要注意接口登录权限的处理
阿里云验证码方式^1.3.1
网关配置
阿里云配置参数参考:https://help.aliyun.com/zh/captcha/captcha2-0/user-guide/access-guidelines?spm=a2c4g.11186623.0.0.19ab218cNAoPFW
yaml
wueasy:
gateway:
filter:
captcha:
enabled: true #是否启用,默认false
items:
- verify-urls:
- /demo/login #需要验证图片验证码接口地址
parameter-type: body #验证码取值参数类型
verify-type: aliyun #指定验证类型
verify-params: #需要验证传输的参数
sceneId: sddd #本次验证对应的场景ID
accessKeyId: sdds #秘钥信息
accessKeySecret: sdsd #秘钥信息
captchaVerifyParam: captchaVerifyParam #由验证码脚本回调的验证参数,指定对应的获取参数名称。
#host: captcha.cn-shanghai.aliyuncs.com #默认为captcha.cn-shanghai.aliyuncs.com,可以不配置
特殊说明:需要注意接口登录权限的处理