Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
有来技术
youlai-mall
提交
72bb9e92
Y
youlai-mall
项目概览
有来技术
/
youlai-mall
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
Y
youlai-mall
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
72bb9e92
编写于
7月 31, 2022
作者:
郝
郝先瑞
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
feat: 通过AOP实现微服务API请求方法的鉴权
上级
53009a14
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
113 addition
and
1 deletion
+113
-1
youlai-admin/admin-boot/src/main/java/com/youlai/admin/controller/SysUserController.java
...n/java/com/youlai/admin/controller/SysUserController.java
+2
-0
youlai-common/common-web/src/main/java/com/youlai/common/web/security/advice/PermissionAdvice.java
...m/youlai/common/web/security/advice/PermissionAdvice.java
+90
-0
youlai-common/common-web/src/main/java/com/youlai/common/web/security/annotation/RequirePerms.java
...m/youlai/common/web/security/annotation/RequirePerms.java
+19
-0
youlai-common/common-web/src/main/resources/META-INF/spring.factories
...n/common-web/src/main/resources/META-INF/spring.factories
+2
-1
未找到文件。
youlai-admin/admin-boot/src/main/java/com/youlai/admin/controller/SysUserController.java
浏览文件 @
72bb9e92
...
...
@@ -15,6 +15,7 @@ import com.youlai.admin.pojo.vo.user.UserVO;
import
com.youlai.admin.service.SysUserService
;
import
com.youlai.common.result.PageResult
;
import
com.youlai.common.result.Result
;
import
com.youlai.common.web.security.annotation.RequirePerms
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.ApiOperation
;
import
io.swagger.annotations.ApiParam
;
...
...
@@ -73,6 +74,7 @@ public class SysUserController {
}
@ApiOperation
(
value
=
"删除用户"
)
@RequirePerms
(
value
=
"sys:user:delete"
)
@DeleteMapping
(
"/{ids}"
)
public
Result
deleteUsers
(
@ApiParam
(
"用户ID,多个以英文逗号(,)分割"
)
@PathVariable
String
ids
)
{
boolean
result
=
userService
.
deleteUsers
(
ids
);
...
...
youlai-common/common-web/src/main/java/com/youlai/common/web/security/advice/PermissionAdvice.java
0 → 100644
浏览文件 @
72bb9e92
package
com.youlai.common.web.security.advice
;
import
cn.hutool.core.collection.CollectionUtil
;
import
cn.hutool.core.convert.Convert
;
import
com.youlai.common.constant.GlobalConstants
;
import
com.youlai.common.result.Result
;
import
com.youlai.common.result.ResultCode
;
import
com.youlai.common.web.security.annotation.RequirePerms
;
import
com.youlai.common.web.util.UserUtils
;
import
lombok.RequiredArgsConstructor
;
import
lombok.extern.slf4j.Slf4j
;
import
org.aspectj.lang.ProceedingJoinPoint
;
import
org.aspectj.lang.annotation.Around
;
import
org.aspectj.lang.annotation.Aspect
;
import
org.aspectj.lang.annotation.Pointcut
;
import
org.aspectj.lang.reflect.MethodSignature
;
import
org.springframework.data.redis.core.RedisTemplate
;
import
org.springframework.stereotype.Component
;
import
java.util.List
;
import
java.util.Map
;
/**
* 权限校验切面
*
* TODO 整合SpEL表达式
*
* @author haoxr
* @date 2022/7/30
*/
@Component
@Aspect
@RequiredArgsConstructor
@Slf4j
public
class
PermissionAdvice
{
private
final
RedisTemplate
redisTemplate
;
/**
* -
* 权限切点定义
*/
@Pointcut
(
"@annotation(com.youlai.common.web.security.annotation.RequirePerms)"
)
public
void
pointCut
()
{
}
@Around
(
"pointCut()"
)
public
Object
around
(
ProceedingJoinPoint
joinPoint
)
throws
Throwable
{
log
.
info
(
"permission verification start."
);
MethodSignature
signature
=
(
MethodSignature
)
joinPoint
.
getSignature
();
RequirePerms
annotation
=
signature
.
getMethod
().
getAnnotation
(
RequirePerms
.
class
);
String
[]
requiredPerms
=
annotation
.
value
();
// 需要的权限标识集合
log
.
info
(
"required perms :{}"
,
requiredPerms
);
// 权限校验
boolean
passFlag
=
false
;
List
<
String
>
userRoles
=
UserUtils
.
getRoles
();
// 超级管理员放行
if
(
UserUtils
.
isRoot
())
{
return
true
;
}
Map
<
String
,
Object
>
permRolesMap
=
redisTemplate
.
opsForHash
().
entries
(
GlobalConstants
.
BTN_PERM_ROLES_KEY
);
if
(
permRolesMap
!=
null
)
{
for
(
String
requiredPerm
:
requiredPerms
)
{
List
<
String
>
hasPermRoles
=
Convert
.
toList
(
String
.
class
,
permRolesMap
.
get
(
requiredPerm
));
// 拥有访问权限的角色
if
(
CollectionUtil
.
isNotEmpty
(
hasPermRoles
))
{
for
(
String
hasPermRole
:
hasPermRoles
)
{
boolean
hasPerm
=
userRoles
.
stream
().
anyMatch
(
userRole
->
userRole
.
equals
(
hasPermRole
));
if
(
hasPerm
)
{
passFlag
=
true
;
break
;
}
}
}
}
}
log
.
info
(
"authentication result :{}"
,
passFlag
);
if
(
passFlag
==
false
)
{
return
Result
.
failed
(
ResultCode
.
ACCESS_UNAUTHORIZED
);
}
// 执行正常业务逻辑
Object
result
=
joinPoint
.
proceed
();
return
result
;
}
}
youlai-common/common-web/src/main/java/com/youlai/common/web/security/annotation/RequirePerms.java
0 → 100644
浏览文件 @
72bb9e92
package
com.youlai.common.web.security.annotation
;
import
java.lang.annotation.*
;
/**
* 权限校验注解
*
* @author haoxr
* @Date 2022/7/30
*/
@Documented
@Target
(
ElementType
.
METHOD
)
@Retention
(
RetentionPolicy
.
RUNTIME
)
public
@interface
RequirePerms
{
String
[]
value
()
default
{};
}
youlai-common/common-web/src/main/resources/META-INF/spring.factories
浏览文件 @
72bb9e92
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.youlai.common.web.config.WebMvcConfig,\
com.youlai.common.web.config.FeignConfig,\
com.youlai.common.web.exception.GlobalExceptionHandler
com.youlai.common.web.exception.GlobalExceptionHandler,\
com.youlai.common.web.security.advice.PermissionAdvice
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录