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