获取图形验证码

  • 配置所需依赖

    • 验证码生成工具

      本项目使用开源的验证码生成工具EasyCaptcha,其支持多种类型的验证码,例如gif、中文、算术等,并且简单易用,具体内容可参考其官方文档

      common模块的pom.xml文件中增加如下内容


      <dependency>
         <groupId>com.github.whvcse</groupId>
         <artifactId>easy-captcha</artifactId>
      </dependency>
    • Redis

      common模块的pom.xml中增加如下内容


      <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-data-redis</artifactId>
      </dependency>

      application.yml中增加如下配置


      spring:
      data:
        redis:
          host: <hostname>
          port: <port>
          database: 0

      注意:上述hostnameport需根据实际情况进行修改

  • 编写Controller层逻辑

    LoginController中增加如下内容


    @Operation(summary = "获取图形验证码")
    @GetMapping("login/captcha")
    public Result<CaptchaVo> getCaptcha() {
       CaptchaVo captcha = service.getCaptcha();
       return Result.ok(captcha);
    }
  • 编写Service层逻辑

    • LoginService中增加如下内容


      CaptchaVo getCaptcha();
    • LoginServiceImpl中增加如下内容


      @Autowired
      private StringRedisTemplate redisTemplate;

      @Override
      public CaptchaVo getCaptcha() {
         SpecCaptcha specCaptcha = new SpecCaptcha(130, 48, 4);
         specCaptcha.setCharType(Captcha.TYPE_DEFAULT);

         String code = specCaptcha.text().toLowerCase();
         String key = RedisConstant.ADMIN_LOGIN_PREFIX + UUID.randomUUID();
         String image = specCaptcha.toBase64();
         redisTemplate.opsForValue().set(key, code, RedisConstant.ADMIN_LOGIN_CAPTCHA_TTL_SEC, TimeUnit.SECONDS);

         return new CaptchaVo(image, key);
      }

      知识点

posted @ 2025-03-20 21:40  新晋软工小白  阅读(16)  评论(0)    收藏  举报