【修复】StpInterfaceImpl.getPermissionList性能问题处理-ALL SNOWY/CLOUD

pull/225/MERGE
dongxiayu 2024-07-17 00:28:55 +08:00
parent a2aa0b2597
commit fd3a2b7741
3 changed files with 64 additions and 6 deletions

View File

@ -0,0 +1,37 @@
/*
* Copyright [2022] [https://www.xiaonuo.vip]
*
* SnowyAPACHE LICENSE 2.0使
*
* 1.LICENSE
* 2.Snowy
* 3.使使
* 4. https://www.xiaonuo.vip
* 5.xiaonuobase@qq.com
* 6.Snowy https://www.xiaonuo.vip
*/
package vip.xiaonuo.common.consts;
/**
* @description
* @author dongxiayu
* @date 2023/1/30 0:44
**/
public class CacheConstant {
/**
*
*/
public static final String PERMISSION_RESOURCE_CACHE_KEY = "permission-resource";
/**
* B
*/
public static final String AUTH_B_PERMISSION_LIST_CACHE_KEY = "auth-b-permission-list:";
/**
* C
*/
public static final String AUTH_C_PERMISSION_LIST_CACHE_KEY = "auth-c-permission-list:";
}

View File

@ -17,6 +17,8 @@ import cn.dev33.satoken.interceptor.SaInterceptor;
import cn.dev33.satoken.stp.StpInterface;
import cn.dev33.satoken.stp.StpLogic;
import cn.dev33.satoken.strategy.SaStrategy;
import cn.hutool.json.JSONUtil;
import jakarta.annotation.Resource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@ -28,6 +30,8 @@ import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import vip.xiaonuo.auth.core.enums.SaClientTypeEnum;
import vip.xiaonuo.auth.core.util.StpClientLoginUserUtil;
import vip.xiaonuo.auth.core.util.StpLoginUserUtil;
import vip.xiaonuo.common.cache.CommonCacheOperator;
import vip.xiaonuo.common.consts.CacheConstant;
import java.util.List;
@ -86,15 +90,24 @@ public class AuthConfigure implements WebMvcConfigurer {
@Component
public static class StpInterfaceImpl implements StpInterface {
@Resource
private CommonCacheOperator commonCacheOperator;
/**
*
*/
@Override
public List<String> getPermissionList(Object loginId, String loginType) {
if (SaClientTypeEnum.B.getValue().equals(loginType)) {
return StpLoginUserUtil.getLoginUser().getPermissionCodeList();
// return StpLoginUserUtil.getLoginUser().getPermissionCodeList();
Object permissionListObject = commonCacheOperator.get(CacheConstant.AUTH_B_PERMISSION_LIST_CACHE_KEY+loginId);
List<String> permissionList = JSONUtil.parseArray(permissionListObject).toList(String.class);
return permissionList;
} else {
return StpClientLoginUserUtil.getClientLoginUser().getPermissionCodeList();
// return StpClientLoginUserUtil.getClientLoginUser().getPermissionCodeList();
Object permissionListObject = commonCacheOperator.get(CacheConstant.AUTH_C_PERMISSION_LIST_CACHE_KEY+loginId);
List<String> permissionList = JSONUtil.parseArray(permissionListObject).toList(String.class);
return permissionList;
}
}

View File

@ -41,6 +41,7 @@ import vip.xiaonuo.auth.modular.login.param.AuthPhoneValidCodeLoginParam;
import vip.xiaonuo.auth.modular.login.result.AuthPicValidCodeResult;
import vip.xiaonuo.auth.modular.login.service.AuthService;
import vip.xiaonuo.common.cache.CommonCacheOperator;
import vip.xiaonuo.common.consts.CacheConstant;
import vip.xiaonuo.common.exception.CommonException;
import vip.xiaonuo.common.util.CommonCryptogramUtil;
import vip.xiaonuo.common.util.CommonEmailUtil;
@ -371,8 +372,12 @@ public class AuthServiceImpl implements AuthService {
saBaseLoginUser.setDataScopeList(Convert.toList(SaBaseLoginUser.DataScope.class,
loginUserApi.getPermissionListByUserIdAndRoleIdList(userAndRoleIdList, saBaseLoginUser.getOrgId())));
// 获取权限码
saBaseLoginUser.setPermissionCodeList(saBaseLoginUser.getDataScopeList().stream()
.map(SaBaseLoginUser.DataScope::getApiUrl).collect(Collectors.toList()));
List<String> permissionCodeList = saBaseLoginUser.getDataScopeList().stream()
.map(SaBaseLoginUser.DataScope::getApiUrl).collect(Collectors.toList());
saBaseLoginUser.setPermissionCodeList(permissionCodeList);
// 权限码列表存入缓存
commonCacheOperator.put(CacheConstant.AUTH_B_PERMISSION_LIST_CACHE_KEY + saBaseLoginUser.getId(),permissionCodeList);
// 获取角色码
saBaseLoginUser.setRoleCodeList(roleCodeList);
// 缓存用户信息此处使用TokenSession为了指定时间内无操作则自动下线
@ -410,8 +415,11 @@ public class AuthServiceImpl implements AuthService {
saBaseClientLoginUser.setDataScopeList(Convert.toList(SaBaseClientLoginUser.DataScope.class,
clientLoginUserApi.getPermissionListByUserIdAndRoleIdList(userAndRoleIdList, null)));
// 获取权限码
saBaseClientLoginUser.setPermissionCodeList(saBaseClientLoginUser.getDataScopeList().stream()
.map(SaBaseClientLoginUser.DataScope::getApiUrl).collect(Collectors.toList()));
List<String> permissionCodeList = saBaseClientLoginUser.getDataScopeList().stream()
.map(SaBaseClientLoginUser.DataScope::getApiUrl).collect(Collectors.toList());
saBaseClientLoginUser.setPermissionCodeList(permissionCodeList);
// 权限码列表存入缓存
commonCacheOperator.put(CacheConstant.AUTH_C_PERMISSION_LIST_CACHE_KEY + saBaseClientLoginUser.getId(),permissionCodeList);
// 获取角色码
saBaseClientLoginUser.setRoleCodeList(roleCodeList);
// 缓存用户信息此处使用TokenSession为了指定时间内无操作则自动下线