Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
Y
yudao-cloud
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
hblj
yudao-cloud
Commits
0045602e
提交
0045602e
authored
6月 17, 2022
作者:
YunaiV
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
增加 SecurityFrameworkServiceImpl 的缓存,提升性能
上级
5c04c9ee
显示空白字符变更
内嵌
并排
正在显示
4 个修改的文件
包含
53 行增加
和
7 行删除
+53
-7
KeyValue.java
...java/cn/iocoder/yudao/framework/common/core/KeyValue.java
+1
-0
pom.xml
yudao-framework/yudao-spring-boot-starter-security/pom.xml
+6
-0
SecurityFrameworkServiceImpl.java
...k/security/core/service/SecurityFrameworkServiceImpl.java
+45
-6
RoleController.http
...le/system/controller/admin/permission/RoleController.http
+1
-1
没有找到文件。
yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/core/KeyValue.java
浏览文件 @
0045602e
package
cn
.
iocoder
.
yudao
.
framework
.
common
.
core
;
import
com.google.common.base.Objects
;
import
lombok.AllArgsConstructor
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
...
...
yudao-framework/yudao-spring-boot-starter-security/pom.xml
浏览文件 @
0045602e
...
...
@@ -57,6 +57,12 @@
<artifactId>
yudao-module-system-api
</artifactId>
<!-- 需要使用它,进行 Token 的校验 -->
<version>
${revision}
</version>
</dependency>
<!-- 工具类相关 -->
<dependency>
<groupId>
com.google.guava
</groupId>
<artifactId>
guava
</artifactId>
</dependency>
</dependencies>
</project>
yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/security/core/service/SecurityFrameworkServiceImpl.java
浏览文件 @
0045602e
package
cn
.
iocoder
.
yudao
.
framework
.
security
.
core
.
service
;
import
cn.hutool.core.collection.CollUtil
;
import
cn.hutool.core.collection.ListUtil
;
import
cn.hutool.core.util.ArrayUtil
;
import
cn.hutool.core.util.HashUtil
;
import
cn.hutool.core.util.ObjectUtil
;
import
cn.iocoder.yudao.framework.common.core.KeyValue
;
import
cn.iocoder.yudao.framework.common.pojo.CommonResult
;
import
cn.iocoder.yudao.framework.common.util.cache.CacheUtils
;
import
cn.iocoder.yudao.framework.security.core.LoginUser
;
import
cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils
;
import
cn.iocoder.yudao.module.system.api.permission.PermissionApi
;
import
com.google.common.cache.CacheLoader
;
import
com.google.common.cache.LoadingCache
;
import
lombok.AllArgsConstructor
;
import
lombok.SneakyThrows
;
import
java.time.Duration
;
import
java.util.Arrays
;
import
java.util.List
;
import
static
cn
.
iocoder
.
yudao
.
framework
.
security
.
core
.
util
.
SecurityFrameworkUtils
.
getLoginUserId
;
...
...
@@ -21,16 +32,45 @@ public class SecurityFrameworkServiceImpl implements SecurityFrameworkService {
private
final
PermissionApi
permissionApi
;
/**
* 针对 {@link #hasAnyRoles(String...)} 的缓存
*/
private
final
LoadingCache
<
KeyValue
<
Long
,
List
<
String
>>,
Boolean
>
hasAnyRolesCache
=
CacheUtils
.
buildAsyncReloadingCache
(
Duration
.
ofMinutes
(
1L
),
// 过期时间 1 分钟
new
CacheLoader
<
KeyValue
<
Long
,
List
<
String
>>,
Boolean
>()
{
@Override
public
Boolean
load
(
KeyValue
<
Long
,
List
<
String
>>
key
)
{
CommonResult
<
Boolean
>
hasAnyRolesResult
=
permissionApi
.
hasAnyRoles
(
key
.
getKey
(),
key
.
getValue
().
toArray
(
new
String
[
0
]));
hasAnyRolesResult
.
checkError
();
return
hasAnyRolesResult
.
getData
();
}
});
/**
* 针对 {@link #hasAnyPermissions(String...)} 的缓存
*/
private
final
LoadingCache
<
KeyValue
<
Long
,
List
<
String
>>,
Boolean
>
hasAnyPermissionsCache
=
CacheUtils
.
buildAsyncReloadingCache
(
Duration
.
ofMinutes
(
1L
),
// 过期时间 1 分钟
new
CacheLoader
<
KeyValue
<
Long
,
List
<
String
>>,
Boolean
>()
{
@Override
public
Boolean
load
(
KeyValue
<
Long
,
List
<
String
>>
key
)
{
CommonResult
<
Boolean
>
hasAnyPermissionsResult
=
permissionApi
.
hasAnyPermissions
(
key
.
getKey
(),
key
.
getValue
().
toArray
(
new
String
[
0
]));
hasAnyPermissionsResult
.
checkError
();
return
hasAnyPermissionsResult
.
getData
();
}
});
@Override
public
boolean
hasPermission
(
String
permission
)
{
return
hasAnyPermissions
(
permission
);
}
@Override
@SneakyThrows
public
boolean
hasAnyPermissions
(
String
...
permissions
)
{
CommonResult
<
Boolean
>
hasAnyPermissionsResult
=
permissionApi
.
hasAnyPermissions
(
getLoginUserId
(),
permissions
);
hasAnyPermissionsResult
.
checkError
();
return
hasAnyPermissionsResult
.
getData
();
return
hasAnyPermissionsCache
.
get
(
new
KeyValue
<>(
getLoginUserId
(),
Arrays
.
asList
(
permissions
)));
}
@Override
...
...
@@ -39,10 +79,9 @@ public class SecurityFrameworkServiceImpl implements SecurityFrameworkService {
}
@Override
@SneakyThrows
public
boolean
hasAnyRoles
(
String
...
roles
)
{
CommonResult
<
Boolean
>
hasAnyRolesResult
=
permissionApi
.
hasAnyRoles
(
getLoginUserId
(),
roles
);
hasAnyRolesResult
.
checkError
();
return
hasAnyRolesResult
.
getData
();
return
hasAnyRolesCache
.
get
(
new
KeyValue
<>(
getLoginUserId
(),
Arrays
.
asList
(
roles
)));
}
@Override
...
...
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/permission/RoleController.http
浏览文件 @
0045602e
...
...
@@ -31,7 +31,7 @@ tenant-id: {{adminTenentId}}
roleId=14
### /role/get 成功
GET {{
b
aseUrl}}/system/role/get?id=100
GET {{
systemB
aseUrl}}/system/role/get?id=100
Content-Type: application/x-www-form-urlencoded
Authorization: Bearer {{token}}
tenant-id: {{adminTenentId}}
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论