滑块验证码后端使用说明

2022/11/21 验证码

验证码逻辑时序图

# 1、引入滑块验证码 jar

<dependency>
  <groupId>com.ith.starter</groupId>
  <artifactId>captcha-ith-boot-starter</artifactId>
</dependency>

# 2、修改 “bootstrap.yml”

在 web.jar 启动项目配置 “bootstrap.yml” 中 新增 “captcha-${spring.profiles.active}.yaml”

spring:
  cloud:
    nacos:
      config:
        namespace: ith-dev
        file-extension: yaml
        shared-configs:
        - ith-service-redis-${spring.profiles.active}.yaml
        - sentinel-${spring.profiles.active}.yaml
        - zipkin-${spring.profiles.active}.yaml
        - feign-${spring.profiles.active}.yaml
        - weixin-${spring.profiles.active}.yaml
        - jms-mq-${spring.profiles.active}.yaml
        ## 新增滑块验证码 配置文件如下
        - captcha-${spring.profiles.active}.yaml

# “captcha-${spring.profiles.active}.yaml” 配置说明:

请将该配置添加到nacos 配置中心里(nacos 配置中心不支持 # 注释,注意去除注释)

aj:
  captcha:
    # 滑动验证,底图路径
    jigsaw: classpath:images/jigsaw
    pic-click: classpath:images/pic-click
    # redis 缓存配置
    cache-type: redis
    # 验证码类型default两种都实例化。
    type: default
    # 右下角水印文字(可不填)
    water-mark: 
    # 校验滑动拼图允许误差偏移量(默认5像素)
    slip-offset: 5
    # aes加密坐标开启或者禁用(true|false)
    aes-status: true
    # 滑动干扰项(0/1/2)
    interference-options: 2
    #点选字体样式 默认Font.BOLD
    font-style: 1
    #点选字体字体大小
    font-size: 25
    #历史数据清除开关
    history-data-clear-enable: false
    # 接口请求次数一分钟限制是否开启 true|false
    req-frequency-limit-enable: false
    # 验证失败5次,get接口锁定
    req-get-lock-limit: 5
    # 验证失败后,锁定时间间隔,s
    req-get-lock-seconds: 360
    # get接口一分钟内请求数限制
    req-get-minute-limit: 30
    # check接口一分钟内请求数限制
    req-check-minute-limit: 60
    # verify接口一分钟内请求数限制
    req-verify-minute-limit: 60

# 4、使用方式1,通过注解进行验证码验证

使用 "@CaptchaValid" 注解只能在Controller 类接口方法上使用如下代码示例:

@ApiOperation(value = "管理员登录",notes = "管理员登录")
@PostMapping("/loginadmin")
@CaptchaValid // 只有通过滑块验证 该接口才会被调用否则直接拒绝
public Object authLoginAdmin(@RequestBody LoginDTO loginDTO) {
    loginDTO.setSec(SecurityUtil.decryptRsaPwd(loginDTO.getSec()));
    Result<?> loginAdmin = loginService.loginAdmin(loginDTO);
    return loginAdmin;
}

# 5、使用方式2,通过方法进行验证码验证

@Autowired
private CaptchaValidService captchaValidService;

@ApiOperation(value = "管理员登录",notes = "管理员登录")
@PostMapping("/loginadmin")
public Object authLoginAdmin(@RequestBody LoginDTO loginDTO,HttpServletRequest request) {
    // 滑块验证码验证
    ResponseModel verification = captchaValidService.verification(request);
    if (verification.isSuccess() == false) {
        // 验证不通过 返回拒绝状态
        return ResultUtils.error().setMsg(verification.getRepMsg());
    }

    loginDTO.setSec(SecurityUtil.decryptRsaPwd(loginDTO.getSec()));
    Result<?> loginAdmin = loginService.loginAdmin(loginDTO);
    return loginAdmin;
}