From da0f6d4998e278c3bcf025a2e1af1ba469eea100 Mon Sep 17 00:00:00 2001
From: puzhibing <393733352@qq.com>
Date: 星期三, 26 八月 2026 11:37:11 +0800
Subject: [PATCH] 增加管理后台登录频次校验和连续错误登录后限制登录 修改管理后台验证码生成和登录校验

---
 ruoyi-auth/src/main/java/com/ruoyi/auth/service/SysPasswordService.java |   19 ++++++++++++++++++-
 1 files changed, 18 insertions(+), 1 deletions(-)

diff --git a/ruoyi-auth/src/main/java/com/ruoyi/auth/service/SysPasswordService.java b/ruoyi-auth/src/main/java/com/ruoyi/auth/service/SysPasswordService.java
index f746379..0364259 100644
--- a/ruoyi-auth/src/main/java/com/ruoyi/auth/service/SysPasswordService.java
+++ b/ruoyi-auth/src/main/java/com/ruoyi/auth/service/SysPasswordService.java
@@ -41,11 +41,28 @@
         return CacheConstants.PWD_ERR_CNT_KEY + username;
     }
 
+    /**
+     * 检查账号是否处于锁定状态(锁定期内直接抛出锁定提示)。
+     * 在限流之前调用,避免锁定提示被"登录尝试过于频繁"掩盖。
+     *
+     * @param username 用户名
+     * @param request 请求
+     */
+    public void checkLocked(String username, HttpServletRequest request)
+    {
+        Integer retryCount = redisService.getIntegerCacheObject(getCacheKey(username));
+        if (retryCount != null && retryCount >= maxRetryCount)
+        {
+            String errMsg = String.format("密码输入错误%s次,帐户锁定%s分钟", maxRetryCount, lockTime);
+            throw new ServiceException(errMsg);
+        }
+    }
+
     public void validate(SysUser user, String password, HttpServletRequest request)
     {
         String username = user.getUserName();
 
-        Integer retryCount = redisService.getCacheObject(getCacheKey(username));
+        Integer retryCount = redisService.getIntegerCacheObject(getCacheKey(username));
 
         if (retryCount == null)
         {

--
Gitblit v1.7.1