mirror of https://gitee.com/xiaonuobase/snowy
【修复】StpInterfaceImpl.getPermissionList性能问题处理-ALL SNOWY/CLOUD
parent
a2aa0b2597
commit
fd3a2b7741
|
@ -0,0 +1,37 @@
|
|||
/*
|
||||
* Copyright [2022] [https://www.xiaonuo.vip]
|
||||
*
|
||||
* Snowy采用APACHE 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:";
|
||||
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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为了指定时间内无操作则自动下线
|
||||
|
|
Loading…
Reference in New Issue