Springboot 最简单实现验证码过期的功能
后台使用Captcha生成验证码使用Redis存储sessionId绑定客户端验证码1、生成验证码后,在redis中sessionId作为验证码Key@GetMapping(value = {"","/"})public void getKaptchaImage(HttpServletRequest request, HttpServletResponse response) throws IOE
·
后台使用Captcha生成验证码
使用Redis存储sessionId绑定客户端验证码
1、生成验证码后,在redis中sessionId作为验证码Key
@GetMapping(value = {"","/"})
public void getKaptchaImage(HttpServletRequest request, HttpServletResponse response) throws IOException {
HttpSession session = request.getSession();
response.setDateHeader("Expires", 0);
response.setHeader("Cache-Control", "no-store, no-cache, must-revalidate");
response.addHeader("Cache-Control", "post-check=0, pre-check=0");
response.setHeader("Pragma", "no-cache");
response.setContentType("image/jpeg");
String capText = captchaProducer.createText();
//session.setAttribute(Constants.KAPTCHA_SESSION_KEY, capText); 此处与session过期冲突
//单独实现验证码60s过期功能
stringRedisTemplate.opsForValue().set(“mar:captcha:”+session.getId(),capText,60, TimeUnit.SECONDS);
BufferedImage bi = captchaProducer.createImage(capText);
ServletOutputStream out = null;
try {
out = response.getOutputStream();
ImageIO.write(bi, "JPEG", out);
out.flush();
} catch (IOException e) {
log.error("获取验证码图片异常:", e);
} finally {
if (null != out) {
out.close();
}
}
}
Redis中数据如下
2、过期时响应
String sessionYzm = stringRedisTemplate.opsForValue().get(mar:captcha:" + request.getSession().getId());
if (sessionYzm==null){
//返回给前端
return "验证码已过期,请重新输入!";
}
更多推荐
已为社区贡献1条内容
所有评论(0)