一、现在项目pom文件导入验证码工具
这里使用easy-captcha进行示范
<!--图形验证码-->
<!--官方文档:https://gitee.com/ele-admin/EasyCaptcha -->
<dependency>
<groupId>com.github.whvcse</groupId>
<artifactId>easy-captcha</artifactId>
<version>xxxx</version>
</dependency>
二、请求图片验证码流程
- 生成验证码,easy-captcha工具类导入依赖后就能直接使用,无需进行配置
// 创建一个长130、宽48、验证码长度为4的图片验证码
SpecCaptcha specCaptcha = new SpecCaptcha(130, 48, 4);
- 将生成的验证码存储到redis中
// 获取生成的验证码内容,作为value存储在redis中
String value = specCaptcha.text().toLowerCase();
// 生成一个UUID,统一拼接一个前缀(admin:login:),标准不唯一。作为存储的value的key
String key = "admin:login:" + UUID.randomUUID();
// 存储到redis中,设置60秒过期
stringRedisTemplate.opsForValue().set(key, value, 60, TimeUnit.SECONDS);
- 返回(生成的验证码图片的base64编码)和(其存储在redis的key)。后续的登录操作中,前端需要输入验证码以及后端返回的key来判断验证码是否输入正确。
// 返回(生成的验证码图片的base64编码)和(其存储在redis的key)
return new CaptchaVo(specCaptcha.toBase64(), key);
代码汇总
@Override
public CaptchaVo getCaptcha() {
// 创建验证码
SpecCaptcha specCaptcha = new SpecCaptcha(130, 48, 4);
// 获取生成的验证码内容,作为value存储在redis中
String value = specCaptcha.text().toLowerCase();
// 生成一个UUID,作为value存储在key中,这里统一拼接一个前缀(admin:login:)
String key = RedisConstant.ADMIN_LOGIN_PREFIX + UUID.randomUUID();
// 存储到redis中,设置60秒过期
stringRedisTemplate.opsForValue().set(key, value, RedisConstant.ADMIN_LOGIN_CAPTCHA_TTL_SEC, TimeUnit.SECONDS);
// 返回验证码图片的base64编码和key
return new CaptchaVo(specCaptcha.toBase64(), key);
}
- 接口返回示例
- 效果如下