Ver Fonte

!39 fix 修复 spring cache 获取在线用户失败问题,优化 DictUtils
Merge pull request !39 from MichelleChung/dev

疯狂的狮子Li há 3 anos atrás
pai
commit
ad8662bb8d

+ 8 - 11
ruoyi-auth/src/main/java/com/ruoyi/auth/listener/UserActionListener.java

@@ -6,11 +6,11 @@ import cn.dev33.satoken.stp.SaLoginModel;
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.http.useragent.UserAgent;
 import cn.hutool.http.useragent.UserAgentUtil;
-import com.ruoyi.common.core.constant.CacheNames;
+import com.ruoyi.common.core.constant.CacheConstants;
 import com.ruoyi.common.core.enums.UserType;
 import com.ruoyi.common.core.utils.ServletUtils;
 import com.ruoyi.common.core.utils.ip.AddressUtils;
-import com.ruoyi.common.redis.utils.CacheUtils;
+import com.ruoyi.common.redis.utils.RedisUtils;
 import com.ruoyi.common.satoken.utils.LoginHelper;
 import com.ruoyi.system.api.domain.SysUserOnline;
 import com.ruoyi.system.api.model.LoginUser;
@@ -18,6 +18,8 @@ import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Component;
 
+import java.time.Duration;
+
 /**
  * 用户行为 侦听器的实现
  *
@@ -51,12 +53,7 @@ public class UserActionListener implements SaTokenListener {
             if (ObjectUtil.isNotNull(user.getDeptName())) {
                 userOnline.setDeptName(user.getDeptName());
             }
-            String cacheNames = CacheNames.ONLINE_TOKEN;
-            if (tokenConfig.getTimeout() > 0) {
-                // 增加 ttl 过期时间 单位秒
-                cacheNames = CacheNames.ONLINE_TOKEN + "#" + tokenConfig.getTimeout() + "s";
-            }
-            CacheUtils.put(cacheNames, tokenValue, userOnline);
+            RedisUtils.setCacheObject(CacheConstants.ONLINE_TOKEN_KEY + tokenValue, userOnline, Duration.ofSeconds(tokenConfig.getTimeout()));
             log.info("user doLogin, useId:{}, token:{}", loginId, tokenValue);
         } else if (userType == UserType.APP_USER) {
             // app端 自行根据业务编写
@@ -68,7 +65,7 @@ public class UserActionListener implements SaTokenListener {
      */
     @Override
     public void doLogout(String loginType, Object loginId, String tokenValue) {
-        CacheUtils.evict(CacheNames.ONLINE_TOKEN, tokenValue);
+        RedisUtils.deleteObject(CacheConstants.ONLINE_TOKEN_KEY + tokenValue);
         log.info("user doLogout, useId:{}, token:{}", loginId, tokenValue);
     }
 
@@ -77,7 +74,7 @@ public class UserActionListener implements SaTokenListener {
      */
     @Override
     public void doKickout(String loginType, Object loginId, String tokenValue) {
-        CacheUtils.evict(CacheNames.ONLINE_TOKEN, tokenValue);
+        RedisUtils.deleteObject(CacheConstants.ONLINE_TOKEN_KEY + tokenValue);
         log.info("user doLogoutByLoginId, useId:{}, token:{}", loginId, tokenValue);
     }
 
@@ -86,7 +83,7 @@ public class UserActionListener implements SaTokenListener {
      */
     @Override
     public void doReplaced(String loginType, Object loginId, String tokenValue) {
-        CacheUtils.evict(CacheNames.ONLINE_TOKEN, tokenValue);
+        RedisUtils.deleteObject(CacheConstants.ONLINE_TOKEN_KEY + tokenValue);
         log.info("user doReplaced, useId:{}, token:{}", loginId, tokenValue);
     }
 

+ 6 - 22
ruoyi-common/ruoyi-common-dict/src/main/java/com/ruoyi/common/dict/utils/DictUtils.java

@@ -1,11 +1,9 @@
 package com.ruoyi.common.dict.utils;
 
-import cn.hutool.core.util.ObjectUtil;
-import com.ruoyi.common.core.constant.CacheConstants;
-import com.ruoyi.common.redis.utils.RedisUtils;
+import com.ruoyi.common.core.constant.CacheNames;
+import com.ruoyi.common.redis.utils.CacheUtils;
 import com.ruoyi.system.api.domain.SysDictData;
 
-import java.util.Collection;
 import java.util.List;
 
 /**
@@ -21,7 +19,7 @@ public class DictUtils {
      * @param dictDatas 字典数据列表
      */
     public static void setDictCache(String key, List<SysDictData> dictDatas) {
-        RedisUtils.setCacheObject(getCacheKey(key), dictDatas);
+        CacheUtils.put(CacheNames.SYS_DICT, key, dictDatas);
     }
 
     /**
@@ -31,11 +29,7 @@ public class DictUtils {
      * @return dictDatas 字典数据列表
      */
     public static List<SysDictData> getDictCache(String key) {
-        List<SysDictData> dictDatas = RedisUtils.getCacheObject(getCacheKey(key));
-        if (ObjectUtil.isNotNull(dictDatas)) {
-            return dictDatas;
-        }
-        return null;
+        return CacheUtils.get(CacheNames.SYS_DICT, key);
     }
 
     /**
@@ -44,24 +38,14 @@ public class DictUtils {
      * @param key 字典键
      */
     public static void removeDictCache(String key) {
-        RedisUtils.deleteObject(getCacheKey(key));
+        CacheUtils.evict(CacheNames.SYS_DICT, key);
     }
 
     /**
      * 清空字典缓存
      */
     public static void clearDictCache() {
-        Collection<String> keys = RedisUtils.keys(CacheConstants.SYS_DICT_KEY + "*");
-        RedisUtils.deleteObject(keys);
+        CacheUtils.clear(CacheNames.SYS_DICT);
     }
 
-    /**
-     * 设置cache key
-     *
-     * @param configKey 参数键
-     * @return 缓存键key
-     */
-    public static String getCacheKey(String configKey) {
-        return CacheConstants.SYS_DICT_KEY + configKey;
-    }
 }

+ 2 - 4
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysUserOnlineController.java

@@ -4,7 +4,6 @@ import cn.dev33.satoken.annotation.SaCheckPermission;
 import cn.dev33.satoken.exception.NotLoginException;
 import cn.dev33.satoken.stp.StpUtil;
 import com.ruoyi.common.core.constant.CacheConstants;
-import com.ruoyi.common.core.constant.CacheNames;
 import com.ruoyi.common.core.domain.R;
 import com.ruoyi.common.core.utils.StreamUtils;
 import com.ruoyi.common.core.utils.StringUtils;
@@ -12,7 +11,7 @@ import com.ruoyi.common.core.web.controller.BaseController;
 import com.ruoyi.common.log.annotation.Log;
 import com.ruoyi.common.log.enums.BusinessType;
 import com.ruoyi.common.mybatis.core.page.TableDataInfo;
-import com.ruoyi.common.redis.utils.CacheUtils;
+import com.ruoyi.common.redis.utils.RedisUtils;
 import com.ruoyi.system.api.domain.SysUserOnline;
 import lombok.RequiredArgsConstructor;
 import org.springframework.web.bind.annotation.*;
@@ -49,8 +48,7 @@ public class SysUserOnlineController extends BaseController {
             if (StpUtil.stpLogic.getTokenActivityTimeoutByToken(token) < 0) {
                 continue;
             }
-            SysUserOnline dto = CacheUtils.get(CacheNames.ONLINE_TOKEN, token);
-            userOnlineList.add(dto);
+            userOnlineList.add(RedisUtils.getCacheObject(CacheConstants.ONLINE_TOKEN_KEY + token));
         }
         if (StringUtils.isNotEmpty(ipaddr) && StringUtils.isNotEmpty(userName)) {
             userOnlineList = StreamUtils.filter(userOnlineList, userOnline ->