Skip to content

验证码模块:图形验证码

简介

continew-starter-captcha-graphic 是 ContiNew Starter 验证码模块针对图形验证码的默认处理,底层基于 Easy Captcha。

xml
<dependency>
    <groupId>top.continew</groupId>
    <artifactId>continew-starter-captcha-graphic</artifactId>
</dependency>

主要特性

  • 版本锁定:涉及依赖已进行版本锁定,使用时无需配置版本
  • 默认配置,针对验证码内容长度、高度、字体等提供默认配置,并适配 JDK 17
  • 提供四种验证支持方式
    • 算术验证(数学计算出正确的值)
    • 中文验证(正确输入图片的中文汉字)
    • 中文闪图验证(正确输入闪图中的中文汉字)
    • 英文验证(正确输入图片中的英文字母)
    • 英文闪图验证(正确输入闪图中的英文字母)

配置示例

配置详情请查看:top.charles7c.continew.starter.captcha.graphic.autoconfigure.GraphicCaptchaProperties

yaml
--- ### 验证码配置
continew-starter:
  captcha:
    ## 图形验证码
    graphic:
      enabled: true
      # 类型(默认:SPEC(英文验证))
      # ARITHMETIC:算术验证
      # CHINESE:中文验证
      # CHINESE_GIF:中文闪图验证
      # SPEC:英文验证
      # GIF:英文闪图验证
      type: SPEC
      # 图片中内容长度(默认:4)
      length: 4
      # 图片中内容高度(默认:111)
      width: 111
      # 图片中内容宽度(默认:36)
      height: 36
      # 字体大小(默认:25)
      fontSize: 25

获取验证码

可参考 top.charles7c.continew.admin.webapi.common.CaptchaController 类中 getImageCaptcha方法

返回参数

json
{
  "uuid": "090b9a2c-1691-4fca-99db-e4ed0cff362f",
  "img": "验证码图片(Base64编码,带图片格式:data:image/gif;base64)"
}

接口示例

java
  // 项目中注入 GraphicCaptchaProperties 验证码配置类使用
  private final GraphicCaptchaProperties graphicCaptchaProperties;
  
  @GetMapping("/get")
  public CaptchaResp get() {
    Captcha captcha = graphicCaptchaProperties.getCaptcha();
    // uuid 作为后续校验验证码的标识
    String uuid = IdUtil.fastUUID();
    String captchaKey = RedisUtils.formatKey(CacheConstants.CAPTCHA_KEY_PREFIX, uuid);
    RedisUtils.set(captchaKey, captcha.text(), Duration.ofMinutes(captchaProperties.getExpirationInMinutes()));
    return CaptchaResp.builder().uuid(uuid).img(captcha.toBase64()).build();
  }

校验验证码

请求参数

json
{
  "uuid": "090b9a2c-1691-4fca-99db-e4ed0cff362f",// 验证码标识
  "captcha": "ABCD"
}

接口示例

java
  @PostMapping("/check")
  public void check(@RequestBody RequestBody body) {
    String captchaKey = RedisUtils.formatKey(CacheConstants.CAPTCHA_KEY_PREFIX, body.getUuid());
    String captcha = RedisUtils.get(captchaKey);
    ValidationUtils.throwIfBlank(captcha, "验证码已失效");
    RedisUtils.delete(captchaKey);
    ValidationUtils.throwIfNotEqualIgnoreCase(body.getCaptcha(), captcha, "验证码错误");
  }

核心依赖

依赖描述
continew-starter-core
nashorn-coreJS 引擎(一个纯编译的 JavaScript 引擎)
easy-captchaEasy Captcha(Java 图形验证码,支持 gif、中文、算术等类型,可用于 Java Web、JavaSE 等项目)