本文主要是介绍图片验证码,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
导入依赖
<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);
这篇关于图片验证码的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!