如何完成生成验证码步骤

 

4.3.1 实体类创建

创建一个实体类封装,给前端返回的验证码数据:


// com.atguigu.spzx.model.vo.system;
@Data
public class ValidateCodeVo {

   private String codeKey ;        // 验证码的key
   private String codeValue ;      // 图片验证码对应的字符串数据

}

4.3.2 IndexController

在IndexController中添加获取验证码接口方法:


@Autowired
private ValidateCodeService validateCodeService;

@GetMapping(value = "/generateValidateCode")
public Result<ValidateCodeVo> generateValidateCode() {
   ValidateCodeVo validateCodeVo = validateCodeService.generateValidateCode();
   return Result.build(validateCodeVo , ResultCodeEnum.SUCCESS) ;
}

4.3.3 ValidateCodeService

业务层代码实现:


// com.atguigu.spzx.manager.service
public interface ValidateCodeService {

   // 获取验证码图片
   public abstract ValidateCodeVo generateValidateCode();

}

// com.atguigu.spzx.manager.service.impl
@Service
public class ValidateCodeServiceImpl implements ValidateCodeService {

   @Autowired
   private RedisTemplate<String , String> redisTemplate ;

   @Override
   public ValidateCodeVo generateValidateCode() {

       // 使用hutool工具包中的工具类生成图片验证码
       //参数:宽 高 验证码位数 干扰线数量
       CircleCaptcha circleCaptcha = CaptchaUtil.createCircleCaptcha(150, 48, 4, 20);
       String codeValue = circleCaptcha.getCode();
       String imageBase64 = circleCaptcha.getImageBase64();

       // 生成uuid作为图片验证码的key
       String codeKey = UUID.randomUUID().toString().replace("-", "");

       // 将验证码存储到Redis中
       redisTemplate.opsForValue().set("user:login:validatecode:" + codeKey , codeValue , 5 , TimeUnit.MINUTES);

       // 构建响应结果数据
       ValidateCodeVo validateCodeVo = new ValidateCodeVo() ;
       validateCodeVo.setCodeKey(codeKey);
       validateCodeVo.setCodeValue("data:image/png;base64," + imageBase64);

       // 返回数据
       return validateCodeVo;
  }

}

 

posted @ 2025-05-15 11:27  新晋软工小白  阅读(18)  评论(0)    收藏  举报