验证码拦截器

验证码拦截器,通常使用在用户登录场景,用户登录时输入图片验证码,验证成功后,调用登录接口。可以避免暴力破解漏洞。

拦截地址配置

验证码拦截器模式不启用

  • enabled:是否启用拦截器,默认不启用false
  • urls:需要拦截的地址
  • field-name:需要处理的字段名称,传入验证码值的参数
  • type:验证码类型

url匹配规则:

  • 模糊匹配:可以通过/**/*模糊匹配所有地址和路径下地址
wueasy:
  gateway:
    interceptor:
      captcha:
        enabled: true #是否启用,默认false
        items: 
        - urls:
          - /servlet/login
          type: IMAGE #验证码类型
          field-name: validateCode #需要处理的字段名称

redis配置

当使用动态口令验证时,必须加载以下redis信息,用于存储每分钟验证次数(解决暴力破解安全漏洞)。

wueasy :
  data: 
    redis: #redis配置
      captcha: #验证相关redis配置
        database : 1 #数据库索引(默认为0)
        host : 127.0.0.1 #服务器地址
        port : 6379 #服务器连接端口
        password : 123456  #服务器连接密码(默认为空)
        pool : #连接池配置
          maxIdle : 8 # 连接池中的最大空闲连接,默认值也是8。
          minIdle : 0 #连接池中的最小空闲连接,默认值也是0。
          maxTotal : 2000 # 如果赋值为-1,则表示不限制;如果pool已经分配了maxActive个jedis实例,则此时pool的状态为exhausted(耗尽)。
          maxWaitMillis : 1000 # 等待可用连接的最大时间,单位毫秒,默认值为-1,表示永不超时。如果超过等待时间,则直接抛出JedisConnectionException
        timeout : 3000 #连接超时时间(毫秒)

验证码类型配置

腾讯验证码地址https://007.qq.com

验证码类型:

  • NONE:不开启验证码,默认
  • IMAGE:图片验证码
  • ONETIME:动态口令
  • QQ:腾讯验证码
  • CUSTOM:自定义验证码实现,3.7.3新增
wueasy:
  gateway:
    interceptor:
      captcha:
        enabled: true #是否启用,默认false
        items: 
        - urls:
          - /servlet/login
          type: IMAGE #验证码类型
          qqApps: #腾讯验证码应用配置
          - appId: #应用id
            appSecret: #应用密钥

请求参数说明

需要传入验证码信息,进行验证码验证。

普通验证码(图片验证码)

普通验证码需要传入,需要传入图片的验证码信息。

图片接口地址/servlet/captcha

腾讯验证码

  • ticket:验证码客户端验证回调的票据
  • randstr:验证码客户端验证回调的随机串
  • aid:应用id

动态口令验证

  • 动态口令需要继承com.wueasy.gateway.security.service.UserAuthenticatorService接口

  • 实现接口中的getUserSecret方法,返回当前用户的动态口令密钥

参考示例

/**
 * 用户动态口令服务
 * @author: fallsea
 * @version 1.0
 */
@Service
public class UserAuthenticatorServiceImpl implements UserAuthenticatorService {

    @Override
    public String getUserSecret() {

        //获取session
        Session session = SessionUtil.getSession();

        //获取request信息
        ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
        HttpServletRequest request = servletRequestAttributes.getRequest();

        //返回密钥
        return "123456";
    }

}

自定义验证码

  • 动态口令需要继承com.wueasy.gateway.security.service.CaptchaValidateService接口

  • 实现接口中的validate方法,返回当前验证结果

参考示例

/**
 * 自定义验证码服务
 * @author: fallsea
 * @version 1.0
 */
@Service(GatewayConstants.CAPTCHA_VALIDATE_CUSTOM)
public class CaptchaValidateCustomServiceImpl implements CaptchaValidateService {

    @Override
    public boolean validate(String fieldName) {

    //fieldName 参数名称

        //获取session
        Session session = SessionUtil.getSession();

        //获取request信息
        ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
        HttpServletRequest request = servletRequestAttributes.getRequest();

        //返回验证结果,true 验证通过,false 验证失败
        return true;
    }

}
Copyright © wueasy.com 2017-2022 all right reserved,powered by Gitbook未经允许,禁止以任何形式传播 修订时间: 2021-12-01

results matching ""

    No results matching ""