导入依赖
<dependencies><dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.8.25</version></dependency>
</dependencies>
代码
@Service
public class ValidateCodeServiceImpl implements ValidateCodeService {@Autowiredprivate RedisTemplate<String , String> redisTemplate ;@Overridepublic ValidateCodeVo generateValidateCode() {// 使用hutool工具包中的工具类生成图片验证码//参数:宽 高 验证码位数 干扰线数量CircleCaptcha circleCaptcha = CaptchaUtil.createCircleCaptcha(150, 48, 4, 2);String codeValue = circleCaptcha.getCode();String imageBase64 = circleCaptcha.getImageBase64();// 生成uuid作为图片验证码的keyString 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;}}
登录判断验证码
//获取输入的验证码和redis中的key
String codeKey = loginDto.getCodeKey();
String captcha = loginDto.getCaptcha();//根据获取redis里面的key,查询redis里面存储验证码
String redisCode = redisTemplate.opsForValue().get("user:login:validatecode:" + codeKey);//比较输入的验证码和redis存储验证码是否一致
//如果不一样提示,用户校验失败
if (StrUtil.isEmpty(redisCode) || !StrUtil.equalsIgnoreCase(redisCode, captcha)) {throw new GuiguException(ResultCodeEnum.VALIDATECODE_ERROR);
}//如果一致,删除redis中的验证码数据
redisTemplate.delete("user:login:validatecode:" + codeKey);