From d615fc515fc52d6ed970c11d59a017e48de4be32 Mon Sep 17 00:00:00 2001
From: zj <1772600164@qq.com>
Date: Tue, 16 Jun 2026 16:43:58 +0800
Subject: [PATCH] 1
---
src/main/java/com/nq/controller/VerifyCodeController.java | 47 +++++++++++++++++++++++++++++++++++------------
1 files changed, 35 insertions(+), 12 deletions(-)
diff --git a/src/main/java/com/nq/controller/VerifyCodeController.java b/src/main/java/com/nq/controller/VerifyCodeController.java
index d5c16df..8290526 100644
--- a/src/main/java/com/nq/controller/VerifyCodeController.java
+++ b/src/main/java/com/nq/controller/VerifyCodeController.java
@@ -1,6 +1,7 @@
package com.nq.controller;
import com.google.code.kaptcha.Producer;
+import com.nq.utils.captcha.CaptchaUtil;
import java.awt.image.BufferedImage;
import java.io.IOException;
import javax.imageio.ImageIO;
@@ -37,7 +38,9 @@
}
@RequestMapping({"getCode.do"})
- public ModelAndView getCode(HttpServletRequest request, HttpServletResponse response, @RequestParam(value = "timestamp", required = false) String timestamp) throws IOException {
+ public ModelAndView getCode(HttpServletRequest request, HttpServletResponse response,
+ @RequestParam(value = "timestamp", required = false) String timestamp,
+ @RequestParam(value = "token", required = false) String token) throws IOException {
ModelAndView mv = new ModelAndView();
if (StringUtils.isEmpty(timestamp)) {
mv.addObject("timestamp", Long.valueOf(System.currentTimeMillis()));
@@ -49,10 +52,23 @@
response.addHeader("Cache-Control", "post-check=0, pre-check=0");
response.setHeader("Pragma", "no-cache");
response.setContentType("image/jpeg");
- String capText = this.captchaProducer.createText();
- HttpSession session = request.getSession();
- session.removeAttribute("KAPTCHA_SESSION_KEY");
- session.setAttribute("KAPTCHA_SESSION_KEY", capText);
+ String capText;
+ if (StringUtils.isNotBlank(token)) {
+ String trimmedToken = token.trim();
+ String existing = CaptchaUtil.get(trimmedToken);
+ if (StringUtils.isNotBlank(existing)) {
+ capText = existing;
+ } else {
+ capText = this.captchaProducer.createText();
+ CaptchaUtil.save(trimmedToken, capText);
+ log.info("图形验证码已写入Redis token={}", trimmedToken);
+ }
+ } else {
+ capText = this.captchaProducer.createText();
+ HttpSession session = request.getSession();
+ session.removeAttribute("KAPTCHA_SESSION_KEY");
+ session.setAttribute("KAPTCHA_SESSION_KEY", capText);
+ }
BufferedImage bi = this.captchaProducer.createImage(capText);
ServletOutputStream out = response.getOutputStream();
ImageIO.write(bi, "jpg", out);
@@ -67,14 +83,21 @@
//验证码
@RequestMapping({"checkCode.do"})
@ResponseBody
- public String checkCode(@RequestParam(value = "timestamp", required = false) String timestamp, @RequestParam(value = "code", required = false) String code, HttpServletRequest request) {
+ public String checkCode(@RequestParam(value = "timestamp", required = false) String timestamp,
+ @RequestParam(value = "code", required = false) String code,
+ @RequestParam(value = "token", required = false) String token,
+ HttpServletRequest request) {
boolean returnStr = false;
- HttpSession session = request.getSession();
- String original = (String) session.getAttribute("KAPTCHA_SESSION_KEY");
- log.info("======用户输入的验证码:" + code);
- log.info("======正确的验证码:" + original);
- if (StringUtils.isNotEmpty(code) && code.equalsIgnoreCase(original)) {
- returnStr = true;
+ if (StringUtils.isNotBlank(token)) {
+ returnStr = CaptchaUtil.verifyAndRemove(token.trim(), code);
+ } else {
+ HttpSession session = request.getSession();
+ String original = (String) session.getAttribute("KAPTCHA_SESSION_KEY");
+ log.info("======用户输入的验证码:" + code);
+ log.info("======正确的验证码:" + original);
+ if (StringUtils.isNotEmpty(code) && code.equalsIgnoreCase(original)) {
+ returnStr = true;
+ }
}
return returnStr + "";
}
--
Gitblit v1.9.3