From 1c77a07c597f08427f76de61a06054c624606b1d Mon Sep 17 00:00:00 2001 From: zhihao <18915542763@163.com> Date: Mon, 8 Jun 2026 15:37:08 +0800 Subject: [PATCH] =?UTF-8?q?czh-20260608-=E5=88=A0=E9=99=A4=E7=99=BB?= =?UTF-8?q?=E5=BD=95=E9=AA=8C=E8=AF=81=E7=A0=81=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../system/controller/LoginController.java | 43 ++++++++++--------- 1 file changed, 22 insertions(+), 21 deletions(-) diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/controller/LoginController.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/controller/LoginController.java index c9271a4..cba65da 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/controller/LoginController.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/controller/LoginController.java @@ -80,26 +80,25 @@ public class LoginController { return result.error500("该用户登录失败次数过多,请于10分钟后再次登录!"); } - // step.1 验证码check - String captcha = sysLoginModel.getCaptcha(); - if(captcha==null){ - result.error500("验证码无效"); - return result; - } - String lowerCaseCaptcha = captcha.toLowerCase(); - // 加入密钥作为混淆,避免简单的拼接,被外部利用,用户自定义该密钥即可 - //update-begin---author:chenrui ---date:20250107 for:[QQYUN-10775]验证码可以复用 #7674------------ - String keyPrefix = Md5Util.md5Encode(sysLoginModel.getCheckKey()+jeecgBaseConfig.getSignatureSecret(), "utf-8"); - String realKey = keyPrefix + lowerCaseCaptcha; - //update-end---author:chenrui ---date:20250107 for:[QQYUN-10775]验证码可以复用 #7674------------ - Object checkCode = redisUtil.get(realKey); - //当进入登录页时,有一定几率出现验证码错误 #1714 - if(checkCode==null || !checkCode.toString().equals(lowerCaseCaptcha)) { - log.warn("验证码错误,key= {} , Ui checkCode= {}, Redis checkCode = {}", sysLoginModel.getCheckKey(), lowerCaseCaptcha, checkCode); - result.error500("验证码错误"); - // 改成特殊的code 便于前端判断 - result.setCode(HttpStatus.PRECONDITION_FAILED.value()); - return result; + // step.1 验证码check(前端已隐藏验证码,后台兼容跳过校验) + String captcha = sysLoginModel.getCaptcha(); + String realKey = null; + if (oConvertUtils.isNotEmpty(captcha)) { + String lowerCaseCaptcha = captcha.toLowerCase(); + // 加入密钥作为混淆,避免简单的拼接,被外部利用,用户自定义该密钥即可 + //update-begin---author:chenrui ---date:20250107 for:[QQYUN-10775]验证码可以复用 #7674------------ + String keyPrefix = Md5Util.md5Encode(sysLoginModel.getCheckKey()+jeecgBaseConfig.getSignatureSecret(), "utf-8"); + realKey = keyPrefix + lowerCaseCaptcha; + //update-end---author:chenrui ---date:20250107 for:[QQYUN-10775]验证码可以复用 #7674------------ + Object checkCode = redisUtil.get(realKey); + //当进入登录页时,有一定几率出现验证码错误 #1714 + if(checkCode==null || !checkCode.toString().equals(lowerCaseCaptcha)) { + log.warn("验证码错误,key= {} , Ui checkCode= {}, Redis checkCode = {}", sysLoginModel.getCheckKey(), lowerCaseCaptcha, checkCode); + result.error500("验证码错误"); + // 改成特殊的code 便于前端判断 + result.setCode(HttpStatus.PRECONDITION_FAILED.value()); + return result; + } } // step.2 校验用户是否存在且有效 @@ -124,7 +123,9 @@ public class LoginController { userInfo(sysUser, result, request); // step.5 登录成功删除验证码 - redisUtil.del(realKey); + if (oConvertUtils.isNotEmpty(realKey)) { + redisUtil.del(realKey); + } redisUtil.del(CommonConstant.LOGIN_FAIL + username); // step.6 记录用户登录日志