From 241c256ff1ba033d2c1d4f958534956ee37cd57a Mon Sep 17 00:00:00 2001
From: gongchunyi <deslre0381@gmail.com>
Date: 星期五, 10 七月 2026 10:31:46 +0800
Subject: [PATCH] fix: redis数据隔离

---
 src/main/java/com/ruoyi/framework/security/service/SysRegisterService.java      |    2 
 src/main/java/com/ruoyi/framework/interceptor/impl/SameUrlDataInterceptor.java  |    2 
 src/main/java/com/ruoyi/framework/config/RedisKeyConfig.java                    |   19 +++++++++
 src/main/java/com/ruoyi/framework/security/service/TokenService.java            |    2 
 src/main/java/com/ruoyi/project/monitor/controller/SysUserOnlineController.java |    4 +-
 src/main/java/com/ruoyi/project/monitor/controller/CacheController.java         |   14 +++---
 src/main/java/com/ruoyi/common/constant/CacheConstants.java                     |   19 +++++++++
 src/main/java/com/ruoyi/common/utils/DictUtils.java                             |    4 +-
 src/main/java/com/ruoyi/framework/security/service/SysLoginService.java         |    2 
 src/main/java/com/ruoyi/project/system/service/impl/SysConfigServiceImpl.java   |    4 +-
 src/main/java/com/ruoyi/framework/security/service/SysPasswordService.java      |    2 
 src/main/java/com/ruoyi/framework/aspectj/RateLimiterAspect.java                |    3 +
 src/main/resources/application.yml                                              |    3 +
 src/main/java/com/ruoyi/project/common/CaptchaController.java                   |    2 
 14 files changed, 62 insertions(+), 20 deletions(-)

diff --git a/src/main/java/com/ruoyi/common/constant/CacheConstants.java b/src/main/java/com/ruoyi/common/constant/CacheConstants.java
index c89692c..d81aa59 100644
--- a/src/main/java/com/ruoyi/common/constant/CacheConstants.java
+++ b/src/main/java/com/ruoyi/common/constant/CacheConstants.java
@@ -8,6 +8,25 @@
 public class CacheConstants
 {
     /**
+     * Redis key 鏈�涓婂眰鍓嶇紑锛堟寜椤圭洰闅旂锛屽彇 spring.profiles.active 鐨勫�硷級
+     * 鐢� com.ruoyi.framework.config.RedisKeyConfig 鍦ㄥ惎鍔ㄦ椂娉ㄥ叆锛�
+     * 鍙栦笉鍒版椂涓虹┖涓诧紝绛変环浜庝笉鍔犲墠缂�锛岃涓洪��鍥炲師鐘朵綔涓哄厹搴曘��
+     */
+    public static String PREFIX = "";
+
+    public static void setPrefix(String prefix)
+    {
+        if (prefix == null || prefix.isEmpty())
+        {
+            PREFIX = "";
+        }
+        else
+        {
+            PREFIX = prefix + ":";
+        }
+    }
+
+    /**
      * 鐧诲綍鐢ㄦ埛 redis key
      */
     public static final String LOGIN_TOKEN_KEY = "login_tokens:";
diff --git a/src/main/java/com/ruoyi/common/utils/DictUtils.java b/src/main/java/com/ruoyi/common/utils/DictUtils.java
index 2803b93..621f242 100644
--- a/src/main/java/com/ruoyi/common/utils/DictUtils.java
+++ b/src/main/java/com/ruoyi/common/utils/DictUtils.java
@@ -222,7 +222,7 @@
      */
     public static void clearDictCache()
     {
-        Collection<String> keys = SpringUtils.getBean(RedisCache.class).keys(CacheConstants.SYS_DICT_KEY + "*");
+        Collection<String> keys = SpringUtils.getBean(RedisCache.class).keys(CacheConstants.PREFIX + CacheConstants.SYS_DICT_KEY + "*");
         SpringUtils.getBean(RedisCache.class).deleteObject(keys);
     }
 
@@ -234,6 +234,6 @@
      */
     public static String getCacheKey(String configKey)
     {
-        return CacheConstants.SYS_DICT_KEY + configKey;
+        return CacheConstants.PREFIX + CacheConstants.SYS_DICT_KEY + configKey;
     }
 }
diff --git a/src/main/java/com/ruoyi/framework/aspectj/RateLimiterAspect.java b/src/main/java/com/ruoyi/framework/aspectj/RateLimiterAspect.java
index 278bcc4..a1f76fe 100644
--- a/src/main/java/com/ruoyi/framework/aspectj/RateLimiterAspect.java
+++ b/src/main/java/com/ruoyi/framework/aspectj/RateLimiterAspect.java
@@ -13,6 +13,7 @@
 import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.data.redis.core.script.RedisScript;
 import org.springframework.stereotype.Component;
+import com.ruoyi.common.constant.CacheConstants;
 import com.ruoyi.common.exception.ServiceException;
 import com.ruoyi.common.utils.StringUtils;
 import com.ruoyi.common.utils.ip.IpUtils;
@@ -75,7 +76,7 @@
 
     public String getCombineKey(RateLimiter rateLimiter, JoinPoint point)
     {
-        StringBuffer stringBuffer = new StringBuffer(rateLimiter.key());
+        StringBuffer stringBuffer = new StringBuffer(CacheConstants.PREFIX).append(rateLimiter.key());
         if (rateLimiter.limitType() == LimitType.IP)
         {
             stringBuffer.append(IpUtils.getIpAddr()).append("-");
diff --git a/src/main/java/com/ruoyi/framework/config/RedisKeyConfig.java b/src/main/java/com/ruoyi/framework/config/RedisKeyConfig.java
new file mode 100644
index 0000000..1a992b5
--- /dev/null
+++ b/src/main/java/com/ruoyi/framework/config/RedisKeyConfig.java
@@ -0,0 +1,19 @@
+package com.ruoyi.framework.config;
+
+import com.ruoyi.common.constant.CacheConstants;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Configuration;
+
+import javax.annotation.PostConstruct;
+
+@Configuration
+public class RedisKeyConfig {
+
+    @Value("${ruoyi.redis.keyPrefix:}")
+    private String keyPrefix;
+
+    @PostConstruct
+    public void init() {
+        CacheConstants.setPrefix(keyPrefix == null ? "" : keyPrefix.trim());
+    }
+}
diff --git a/src/main/java/com/ruoyi/framework/interceptor/impl/SameUrlDataInterceptor.java b/src/main/java/com/ruoyi/framework/interceptor/impl/SameUrlDataInterceptor.java
index ef335f3..dc7762b 100644
--- a/src/main/java/com/ruoyi/framework/interceptor/impl/SameUrlDataInterceptor.java
+++ b/src/main/java/com/ruoyi/framework/interceptor/impl/SameUrlDataInterceptor.java
@@ -63,7 +63,7 @@
         String submitKey = StringUtils.trimToEmpty(request.getHeader(header));
 
         // 鍞竴鏍囪瘑锛堟寚瀹歬ey + url + 娑堟伅澶达級
-        String cacheRepeatKey = CacheConstants.REPEAT_SUBMIT_KEY + url + submitKey;
+        String cacheRepeatKey = CacheConstants.PREFIX + CacheConstants.REPEAT_SUBMIT_KEY + url + submitKey;
 
         Object sessionObj = redisCache.getCacheObject(cacheRepeatKey);
         if (sessionObj != null)
diff --git a/src/main/java/com/ruoyi/framework/security/service/SysLoginService.java b/src/main/java/com/ruoyi/framework/security/service/SysLoginService.java
index 6a7874a..d0286a5 100644
--- a/src/main/java/com/ruoyi/framework/security/service/SysLoginService.java
+++ b/src/main/java/com/ruoyi/framework/security/service/SysLoginService.java
@@ -121,7 +121,7 @@
         boolean captchaEnabled = configService.selectCaptchaEnabled();
         if (captchaEnabled)
         {
-            String verifyKey = CacheConstants.CAPTCHA_CODE_KEY + StringUtils.nvl(uuid, "");
+            String verifyKey = CacheConstants.PREFIX + CacheConstants.CAPTCHA_CODE_KEY + StringUtils.nvl(uuid, "");
             String captcha = redisCache.getCacheObject(verifyKey);
             if (captcha == null)
             {
diff --git a/src/main/java/com/ruoyi/framework/security/service/SysPasswordService.java b/src/main/java/com/ruoyi/framework/security/service/SysPasswordService.java
index 97c3518..186c77a 100644
--- a/src/main/java/com/ruoyi/framework/security/service/SysPasswordService.java
+++ b/src/main/java/com/ruoyi/framework/security/service/SysPasswordService.java
@@ -38,7 +38,7 @@
      */
     private String getCacheKey(String username)
     {
-        return CacheConstants.PWD_ERR_CNT_KEY + username;
+        return CacheConstants.PREFIX + CacheConstants.PWD_ERR_CNT_KEY + username;
     }
 
     public void validate(SysUser user)
diff --git a/src/main/java/com/ruoyi/framework/security/service/SysRegisterService.java b/src/main/java/com/ruoyi/framework/security/service/SysRegisterService.java
index 17274eb..e4f2da4 100644
--- a/src/main/java/com/ruoyi/framework/security/service/SysRegisterService.java
+++ b/src/main/java/com/ruoyi/framework/security/service/SysRegisterService.java
@@ -100,7 +100,7 @@
      */
     public void validateCaptcha(String username, String code, String uuid)
     {
-        String verifyKey = CacheConstants.CAPTCHA_CODE_KEY + StringUtils.nvl(uuid, "");
+        String verifyKey = CacheConstants.PREFIX + CacheConstants.CAPTCHA_CODE_KEY + StringUtils.nvl(uuid, "");
         String captcha = redisCache.getCacheObject(verifyKey);
         redisCache.deleteObject(verifyKey);
         if (captcha == null)
diff --git a/src/main/java/com/ruoyi/framework/security/service/TokenService.java b/src/main/java/com/ruoyi/framework/security/service/TokenService.java
index 7d09431..8e00ed5 100644
--- a/src/main/java/com/ruoyi/framework/security/service/TokenService.java
+++ b/src/main/java/com/ruoyi/framework/security/service/TokenService.java
@@ -249,6 +249,6 @@
 
     private String getTokenKey(String uuid)
     {
-        return CacheConstants.LOGIN_TOKEN_KEY + uuid;
+        return CacheConstants.PREFIX + CacheConstants.LOGIN_TOKEN_KEY + uuid;
     }
 }
diff --git a/src/main/java/com/ruoyi/project/common/CaptchaController.java b/src/main/java/com/ruoyi/project/common/CaptchaController.java
index 13dd70f..e284b33 100644
--- a/src/main/java/com/ruoyi/project/common/CaptchaController.java
+++ b/src/main/java/com/ruoyi/project/common/CaptchaController.java
@@ -60,7 +60,7 @@
 
         // 淇濆瓨楠岃瘉鐮佷俊鎭�
         String uuid = IdUtils.simpleUUID();
-        String verifyKey = CacheConstants.CAPTCHA_CODE_KEY + uuid;
+        String verifyKey = CacheConstants.PREFIX + CacheConstants.CAPTCHA_CODE_KEY + uuid;
 
         String capStr = null, code = null;
         BufferedImage image = null;
diff --git a/src/main/java/com/ruoyi/project/monitor/controller/CacheController.java b/src/main/java/com/ruoyi/project/monitor/controller/CacheController.java
index 748f1b8..2e95372 100644
--- a/src/main/java/com/ruoyi/project/monitor/controller/CacheController.java
+++ b/src/main/java/com/ruoyi/project/monitor/controller/CacheController.java
@@ -36,13 +36,13 @@
 
     private final static List<SysCache> caches = new ArrayList<SysCache>();
     {
-        caches.add(new SysCache(CacheConstants.LOGIN_TOKEN_KEY, "鐢ㄦ埛淇℃伅"));
-        caches.add(new SysCache(CacheConstants.SYS_CONFIG_KEY, "閰嶇疆淇℃伅"));
-        caches.add(new SysCache(CacheConstants.SYS_DICT_KEY, "鏁版嵁瀛楀吀"));
-        caches.add(new SysCache(CacheConstants.CAPTCHA_CODE_KEY, "楠岃瘉鐮�"));
-        caches.add(new SysCache(CacheConstants.REPEAT_SUBMIT_KEY, "闃查噸鎻愪氦"));
-        caches.add(new SysCache(CacheConstants.RATE_LIMIT_KEY, "闄愭祦澶勭悊"));
-        caches.add(new SysCache(CacheConstants.PWD_ERR_CNT_KEY, "瀵嗙爜閿欒娆℃暟"));
+        caches.add(new SysCache(CacheConstants.PREFIX + CacheConstants.LOGIN_TOKEN_KEY, "鐢ㄦ埛淇℃伅"));
+        caches.add(new SysCache(CacheConstants.PREFIX + CacheConstants.SYS_CONFIG_KEY, "閰嶇疆淇℃伅"));
+        caches.add(new SysCache(CacheConstants.PREFIX + CacheConstants.SYS_DICT_KEY, "鏁版嵁瀛楀吀"));
+        caches.add(new SysCache(CacheConstants.PREFIX + CacheConstants.CAPTCHA_CODE_KEY, "楠岃瘉鐮�"));
+        caches.add(new SysCache(CacheConstants.PREFIX + CacheConstants.REPEAT_SUBMIT_KEY, "闃查噸鎻愪氦"));
+        caches.add(new SysCache(CacheConstants.PREFIX + CacheConstants.RATE_LIMIT_KEY, "闄愭祦澶勭悊"));
+        caches.add(new SysCache(CacheConstants.PREFIX + CacheConstants.PWD_ERR_CNT_KEY, "瀵嗙爜閿欒娆℃暟"));
     }
 
     @PreAuthorize("@ss.hasPermi('monitor:cache:list')")
diff --git a/src/main/java/com/ruoyi/project/monitor/controller/SysUserOnlineController.java b/src/main/java/com/ruoyi/project/monitor/controller/SysUserOnlineController.java
index 763c141..b8f650f 100644
--- a/src/main/java/com/ruoyi/project/monitor/controller/SysUserOnlineController.java
+++ b/src/main/java/com/ruoyi/project/monitor/controller/SysUserOnlineController.java
@@ -42,7 +42,7 @@
     @GetMapping("/list")
     public TableDataInfo list(String ipaddr, String userName)
     {
-        Collection<String> keys = redisCache.keys(CacheConstants.LOGIN_TOKEN_KEY + "*");
+        Collection<String> keys = redisCache.keys(CacheConstants.PREFIX + CacheConstants.LOGIN_TOKEN_KEY + "*");
         List<SysUserOnline> userOnlineList = new ArrayList<SysUserOnline>();
         for (String key : keys)
         {
@@ -77,7 +77,7 @@
     @DeleteMapping("/{tokenId}")
     public AjaxResult forceLogout(@PathVariable String tokenId)
     {
-        redisCache.deleteObject(CacheConstants.LOGIN_TOKEN_KEY + tokenId);
+        redisCache.deleteObject(CacheConstants.PREFIX + CacheConstants.LOGIN_TOKEN_KEY + tokenId);
         return success();
     }
 }
diff --git a/src/main/java/com/ruoyi/project/system/service/impl/SysConfigServiceImpl.java b/src/main/java/com/ruoyi/project/system/service/impl/SysConfigServiceImpl.java
index 0396057..26c0cfb 100644
--- a/src/main/java/com/ruoyi/project/system/service/impl/SysConfigServiceImpl.java
+++ b/src/main/java/com/ruoyi/project/system/service/impl/SysConfigServiceImpl.java
@@ -184,7 +184,7 @@
     @Override
     public void clearConfigCache()
     {
-        Collection<String> keys = redisCache.keys(CacheConstants.SYS_CONFIG_KEY + "*");
+        Collection<String> keys = redisCache.keys(CacheConstants.PREFIX + CacheConstants.SYS_CONFIG_KEY + "*");
         redisCache.deleteObject(keys);
     }
 
@@ -224,6 +224,6 @@
      */
     private String getCacheKey(String configKey)
     {
-        return CacheConstants.SYS_CONFIG_KEY + configKey;
+        return CacheConstants.PREFIX + CacheConstants.SYS_CONFIG_KEY + configKey;
     }
 }
diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml
index f7bad71..378758f 100644
--- a/src/main/resources/application.yml
+++ b/src/main/resources/application.yml
@@ -2,3 +2,6 @@
 spring:
   profiles:
     active: xyyj
+ruoyi:
+  redis:
+    keyPrefix: ${spring.profiles.active}

--
Gitblit v1.9.3