瀏覽代碼

代码调整,退出时清除个人相关缓存

zhulu 11 月之前
父節點
當前提交
9695b3c846

+ 10 - 0
soc-common/soc-common-core/src/main/java/com/xunmei/common/core/utils/JwtUtils.java

@@ -112,6 +112,16 @@ public class JwtUtils
     }
 
     /**
+     * 根据token令牌 获取客户端类型
+     * @param claims 令牌
+     * @return 客户端类型
+     */
+    public static String getPlatformType(Claims claims)
+    {
+        return getValue(claims, SecurityConstants.PLATFORM_TYPE);
+    }
+
+    /**
      * 根据身份信息获取用户ID
      * 
      * @param claims 身份信息

+ 17 - 3
soc-common/soc-common-security/src/main/java/com/xunmei/common/security/service/TokenService.java

@@ -5,6 +5,7 @@ import com.xunmei.common.core.constant.CacheConstants;
 import com.xunmei.common.core.constant.Constants;
 import com.xunmei.common.core.constant.SecurityConstants;
 import com.xunmei.common.core.constant.SystemParameterConstant;
+import com.xunmei.common.core.text.Convert;
 import com.xunmei.common.core.utils.DateUtils;
 import com.xunmei.common.core.utils.JwtUtils;
 import com.xunmei.common.core.utils.ServletUtils;
@@ -17,6 +18,7 @@ import com.xunmei.system.api.RemoteConfigService;
 import com.xunmei.system.api.RemoteUserService;
 import com.xunmei.system.api.domain.SysConfig;
 import com.xunmei.system.api.model.LoginUser;
+import io.jsonwebtoken.Claims;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -152,9 +154,14 @@ public class TokenService {
         LoginUser user = null;
         try {
             if (StringUtils.isNotEmpty(token)) {
-                String userkey = JwtUtils.getUserKey(token);
-                String userId = JwtUtils.getUserId(token);
-                String platformType = JwtUtils.getPlatformType(token);
+//                String userkey = JwtUtils.getUserKey(token);
+//                String userId = JwtUtils.getUserId(token);
+//                String platformType = JwtUtils.getPlatformType(token);
+                // 减少反序列化次数 提升效率
+                Claims claims = JwtUtils.parseToken(token);
+                String userkey = Convert.toStr(claims.get(SecurityConstants.USER_KEY), "");
+                String userId = Convert.toStr(claims.get(SecurityConstants.DETAILS_USER_ID), "");
+                String platformType = Convert.toStr(claims.get(SecurityConstants.PLATFORM_TYPE), "");
                 user = RedisUtils.getCacheObject(getTokenKey(userkey, userId, platformType));
             }
             return user;
@@ -182,6 +189,13 @@ public class TokenService {
             String platformType = JwtUtils.getPlatformType(token);
             //redisService.deleteObject(getTokenKey(userkey));
             RedisUtils.deleteObject(getTokenKey(userkey, userId, platformType));
+            //清除个人相关缓存
+            String userName = JwtUtils.getUserName(token);
+            RedisUtils.deleteObject(CacheConstants.USER_CACHE_SINGLE_KEY+userName);
+            RedisUtils.deleteObject(CacheConstants.USER_CACHE_SINGLE_KEY+userId);
+            RedisUtils.deleteObject(CacheConstants.USER_CACHE_ROLE_ID_KEY+userId);
+            RedisUtils.deleteObject(CacheConstants.USER_CACHE_ROLE_OBJECT_KEY+userId);
+            RedisUtils.deleteObject(CacheConstants.USER_ROLE_PERMISSION_CACHE_KEY+userId);
         }
     }
 

+ 4 - 4
soc-gateway/src/main/java/com/xunmei/gateway/filter/AuthFilter.java

@@ -58,15 +58,15 @@ public class AuthFilter implements GlobalFilter, Ordered {
         }
         String userkey = JwtUtils.getUserKey(claims);
         String userId = JwtUtils.getUserId(claims);
-        String platformType = JwtUtils.getPlatformType(token);
+        String platformType = JwtUtils.getPlatformType(claims);
         boolean islogin = RedisUtils.hasKey(getTokenKey(userkey,userId,platformType));
         //boolean islogin = redisService.hasKey(getTokenKey(userkey));
         if (!islogin) {
             return unauthorizedResponse(exchange, "登录状态已过期");
         }
-        String userid = JwtUtils.getUserId(claims);
+//        String userid = JwtUtils.getUserId(claims);
         String username = JwtUtils.getUserName(claims);
-        if (StringUtils.isEmpty(userid) || StringUtils.isEmpty(username)) {
+        if (StringUtils.isEmpty(userId) || StringUtils.isEmpty(username)) {
             return unauthorizedResponse(exchange, "令牌验证失败");
         }
 
@@ -76,7 +76,7 @@ public class AuthFilter implements GlobalFilter, Ordered {
 
         // 设置用户信息到请求
         addHeader(mutate, SecurityConstants.USER_KEY, userkey);
-        addHeader(mutate, SecurityConstants.DETAILS_USER_ID, userid);
+        addHeader(mutate, SecurityConstants.DETAILS_USER_ID, userId);
         addHeader(mutate, SecurityConstants.DETAILS_USERNAME, username);
         addHeader(mutate, SecurityConstants.DETAILS_MASTER_USER_ID, masterUserId);
         addHeader(mutate, SecurityConstants.DETAILS_MASTERUSERNAME, masterUserName);

+ 8 - 4
soc-modules/soc-modules-system/src/main/java/com/xunmei/system/controller/SysUserController.java

@@ -385,9 +385,10 @@ public class SysUserController extends BaseController {
         }
 //        user.setOriginalOrgId(user.getOrgId());
         user.setUpdateBy(SecurityUtils.getUsername());
+        final int result = userService.updateUser(user);
         userService.clearUserCacheByUserId(user.getId());
         userService.clearUserCacheByUserName(user.getUsername());
-        return toAjax(userService.updateUser(user));
+        return toAjax(result);
     }
 
     /**
@@ -416,9 +417,10 @@ public class SysUserController extends BaseController {
         user.setSalt(salt);
         user.setPassword(SecurityUtils.encryptPassword(user.getPassword(), salt));
         user.setUpdateBy(SecurityUtils.getUsername());
+        final int result = userService.resetPwd(user);
         userService.clearUserCacheByUserId(user.getId());
         userService.clearUserCacheByUserName(user.getUsername());
-        return toAjax(userService.resetPwd(user));
+        return toAjax(result);
     }
 
     /**
@@ -431,9 +433,10 @@ public class SysUserController extends BaseController {
         userService.checkUserAllowed(user);
         userService.checkUserDataScope(user.getId());
         user.setUpdateBy(SecurityUtils.getUsername());
+        final int result = userService.updateUserStatus(user);
         userService.clearUserCacheByUserId(user.getId());
         userService.clearUserCacheByUserName(user.getUsername());
-        return toAjax(userService.updateUserStatus(user));
+        return toAjax(result);
     }
 
     /**
@@ -820,9 +823,10 @@ public class SysUserController extends BaseController {
         SysUser updateUser = new SysUser();
         updateUser.setId(SecurityUtils.getUserId());
         updateUser.setSignatureSeal(user.getSignatureSeal());
+        final Boolean result = userService.updateById(updateUser);
         userService.clearUserCacheByUserId(SecurityUtils.getUserId());
         userService.clearUserCacheByUserName(SecurityUtils.getUsername());
-        return toAjax(userService.updateById(updateUser));
+        return toAjax(result);
     }
 
     @RequiresPermissions("system:user:import")

+ 14 - 1
soc-modules/soc-modules-system/src/main/java/com/xunmei/system/service/impl/SysPermissionServiceImpl.java

@@ -1,5 +1,7 @@
 package com.xunmei.system.service.impl;
 
+import cn.hutool.core.util.ObjectUtil;
+import com.xunmei.common.core.utils.StringUtils;
 import com.xunmei.system.api.domain.SysRole;
 import com.xunmei.system.api.domain.SysUser;
 import com.xunmei.system.service.ISysMenuService;
@@ -9,6 +11,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
 
+import java.util.Arrays;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
@@ -44,7 +47,17 @@ public class SysPermissionServiceImpl implements ISysPermissionService
         }
         else
         {
-            roles.addAll(roleService.selectRolePermissionByUserId(user.getId()));
+            if(ObjectUtil.isNotEmpty(user.getRoles()))
+            {
+                for (SysRole perm : user.getRoles()) {
+                    if (StringUtils.isNotNull(perm)) {
+                        roles.addAll(Arrays.asList(perm.getRoleKey().trim().split(",")));
+                    }
+                }
+            }
+            else{
+                roles.addAll(roleService.selectRolePermissionByUserId(user.getId()));
+            }
         }
         return roles;
     }

+ 4 - 0
soc-modules/soc-modules-system/src/main/java/com/xunmei/system/service/impl/SysRoleServiceImpl.java

@@ -122,6 +122,10 @@ public class SysRoleServiceImpl extends ServiceImpl<SysRoleMapper, SysRole> impl
 //        List<SysRole> perms = roleMapper.selectRolePermissionByUserId(userId);
         List<SysRole> perms =this.selectRolesByUserId(userId);
         Set<String> permsSet = new HashSet<>();
+        if(ObjectUtil.isEmpty(perms))
+        {
+            return permsSet;
+        }
         for (SysRole perm : perms) {
             if (StringUtils.isNotNull(perm)) {
                 permsSet.addAll(Arrays.asList(perm.getRoleKey().trim().split(",")));