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

---
 ruoyi-common/ruoyi-common-redis/src/main/java/com/ruoyi/common/redis/service/RedisService.java |   20 ++++++++++++++++++++
 1 files changed, 20 insertions(+), 0 deletions(-)

diff --git a/ruoyi-common/ruoyi-common-redis/src/main/java/com/ruoyi/common/redis/service/RedisService.java b/ruoyi-common/ruoyi-common-redis/src/main/java/com/ruoyi/common/redis/service/RedisService.java
index 5d3ad86..4c02c90 100644
--- a/ruoyi-common/ruoyi-common-redis/src/main/java/com/ruoyi/common/redis/service/RedisService.java
+++ b/ruoyi-common/ruoyi-common-redis/src/main/java/com/ruoyi/common/redis/service/RedisService.java
@@ -1,6 +1,7 @@
 package com.ruoyi.common.redis.service;
 
 import java.util.Collection;
+import java.util.Collections;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
@@ -11,6 +12,7 @@
 import org.springframework.data.redis.core.HashOperations;
 import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.data.redis.core.ValueOperations;
+import org.springframework.data.redis.core.script.DefaultRedisScript;
 import org.springframework.stereotype.Component;
 
 /**
@@ -50,6 +52,24 @@
     }
 
     /**
+     * 缓存值原子递增,并在首次递增时设置有效时间
+     *
+     * @param key 缓存键值
+     * @param timeout 时间
+     * @param timeUnit 时间颗粒度
+     * @return 递增后的值
+     */
+    public long incrementCacheValue(final String key, final long timeout, final TimeUnit timeUnit)
+    {
+        String scriptText = "local count = redis.call('incr', KEYS[1]); "
+                + "if count == 1 then redis.call('pexpire', KEYS[1], ARGV[1]); end; return count;";
+        DefaultRedisScript<Long> script = new DefaultRedisScript<>(scriptText, Long.class);
+        long timeoutMillis = timeUnit.toMillis(timeout);
+        Long count = (Long) redisTemplate.execute(script, Collections.singletonList(key), timeoutMillis);
+        return count == null ? 0L : count;
+    }
+
+    /**
      * 设置有效时间
      *
      * @param key Redis键

--
Gitblit v1.7.1