SpringSecurity下,使用Redis实现验证码验证,用户错误登陆次数限制,锁定/释放用户
写在前面
本篇涉及两个场景
- 验证码验证逻辑
- 错误登录控制(锁定/释放用户)
本篇只是对这两种场景的一种实现,可供参考,还有别的实现方式,可自行学习探索、使用
一、接口设计
1.1、验证码接口
1.2、登陆接口
二、验证码验证逻辑
2.1、验证码生成,几种生成方式可供参考,参考链接
参考中都是写到文件,实际使用时,是请求验证码生成接口,接口响应写到输出流到页面
/**
* 生成验证码
*/
@RestController
public class CaptchaImageController {
@Autowired
private StringRedisTemplate stringRedisTemplate;
@GetMapping("/code/image")
public ResultBean createCode(String captchaId, HttpServletRequest request, HttpServletResponse response) throws IOException {
if (StringUtil.isNullStr(captchaId)) {
return ResultBean.error(CodeEnum.CUSTON_ERROR, "缺少参数");
}
// 设置大小,以及位数
SpecCaptcha specCaptcha = new SpecCaptcha(129, 48, 4);
// 设置字体
specCaptcha.setFont(new Font("Times New Roman", Font.ITALIC, 34));
// 设置类型
specCaptcha.setCharType(Captcha.TYPE_NUM_AND_UPPER);
stringRedisTemplate.opsForValue().set(
RedisKeyGen.getCaptcha(captchaId),
specCaptcha.text(),
60,
TimeUnit.SECONDS)