From 6f9a0cdb6360ff80818ce9ac947fb686e3045f8a Mon Sep 17 00:00:00 2001 From: jyy <935090232@qq.com> Date: Wed, 07 Apr 2021 16:25:03 +0800 Subject: [PATCH] 登录权限加入redis --- zq-erp/src/main/java/com/matrix/system/app/authority/AppAuthorityManager.java | 38 ++++++++++++++++++++++++++++++++++++-- 1 files changed, 36 insertions(+), 2 deletions(-) diff --git a/zq-erp/src/main/java/com/matrix/system/app/authority/AppAuthorityManager.java b/zq-erp/src/main/java/com/matrix/system/app/authority/AppAuthorityManager.java index b34a8e5..14b6089 100644 --- a/zq-erp/src/main/java/com/matrix/system/app/authority/AppAuthorityManager.java +++ b/zq-erp/src/main/java/com/matrix/system/app/authority/AppAuthorityManager.java @@ -1,5 +1,10 @@ package com.matrix.system.app.authority; +import cn.hutool.crypto.SecureUtil; +import cn.hutool.json.JSONArray; +import cn.hutool.json.JSONObject; +import cn.hutool.json.JSONUtil; +import com.matrix.component.redis.RedisClient; import com.matrix.core.constance.MatrixConstance; import com.matrix.core.pojo.AjaxResult; import com.matrix.core.tools.StringUtils; @@ -31,7 +36,12 @@ private static final int DEFAULT_2 = 2; @Autowired + RedisClient redisClient; + + @Autowired SysFunctionService sysFunctionService; + + public static final String USER_POWER_REDISKEY = "USER_POWER_"; public static final String USERFUNCTION = "userFunction"; /** 用户所有路径权限的记录 **/ @@ -91,8 +101,32 @@ List<String> userUrlMapping = new ArrayList<>(); - // 获取用户所有权限 - getUserFunction(user,userFunction, userUrlMapping); + String redisKey = USER_POWER_REDISKEY + SecureUtil.md5(user.getSuId()+""); + String cachedValue = redisClient.getCachedValue(redisKey); + if (StringUtils.isNotBlank(cachedValue)) { + //从缓存中获取用户权限 + JSONObject powerMap = JSONUtil.parseObj(cachedValue); + String userFunctionMapStr = powerMap.get(USERFUNCTION).toString(); + JSONObject userFunctionMap = JSONUtil.parseObj(userFunctionMapStr); + Set<String> userFunctionMapKeys = userFunctionMap.keySet(); + userFunctionMapKeys.forEach(key -> { + userFunction.put(key, userFunctionMap.get(key, SysFunction.class)); + }); + + String userUrlMappingListStr = powerMap.get(USER_URL_MAPPING).toString(); + JSONArray userUrlMappingArray = JSONUtil.parseArray(userUrlMappingListStr); + for (int i = 0; i < userUrlMappingArray.size(); i++) { + userUrlMapping.add(userUrlMappingArray.get(i, String.class)); + } + } else { + // 获取用户所有权限 + getUserFunction(user,userFunction, userUrlMapping); + + Map<String ,Object> powerMap=new HashMap<>(); + powerMap.put(USERFUNCTION, userFunction); + powerMap.put(USER_URL_MAPPING, userUrlMapping); + redisClient.saveValue(redisKey,JSONUtil.parseObj(powerMap,true)); + } // TODO 这里的用户权限应该放到redis缓存中,在拦截器中做权限拦截 -- Gitblit v1.9.1