添加依赖
<dependency>
<groupId>com.github.whvcse</groupId>
<artifactId>easy-captcha</artifactId>
<version>1.6.2</version>
</dependency>
验证码使用流程:
需要将验证码存入redis中,当前端获取验证码时,顺便传过一个码过来。后端将码添加一个前缀后
,用于该验证码保存到redis
中的key
值,该验证包保存时需要带一个过期时间,默认单位是秒。在这个案例中,更多常量写在配置文件中。
@ApiOperation("获取验证码")
@GetMapping(value = "/code")
public ResponseEntity<Object> getCode(){
// 算术类型 https://gitee.com/whvse/EasyCaptcha
ArithmeticCaptcha captcha = new ArithmeticCaptcha(111, 36);
// 几位数运算,默认是两位
captcha.setLen(2);
// 获取运算的结果
String result ="";
try {
result = new Double(Double.parseDouble(captcha.text())).intValue()+"";
}catch (Exception e){
result = captcha.text();
}
/**
* 简化的UUID,去掉了横线
* hutools
* @return 简化的UUID,去掉了横线
*/
String uuid = properties.getCodeKey() + IdUtil.simpleUUID();
// 保存
redisUtils.set(uuid, result, expiration, TimeUnit.MINUTES);
// 验证码信息
Map<String,Object> imgResult = new HashMap<String,Object>(2){{
put("img", captcha.toBase64());
put("uuid", uuid);
}};
return ResponseEntity.ok(imgResult);
}
前端请求
export function getCodeImg() {
return request({
url: 'auth/code',
method: 'get'
})
}
getCode() {
getCodeImg().then(res => {
this.codeUrl = res.img
this.loginForm.uuid = res.uuid
})
}
登录验证验证码
// 查询验证码
String code = (String) redisUtils.get(authUser.getUuid());
// 清除验证码
redisUtils.del(authUser.getUuid());
if (StringUtils.isBlank(code)) {
throw new BadRequestException("验证码不存在或已过期");
}
if (StringUtils.isBlank(authUser.getCode()) || !authUser.getCode().equalsIgnoreCase(code)) {
throw new BadRequestException("验证码错误");
}