本文介绍: 2:定义aspect,通过切片找到controller类上的@PreAuth和方法上的@PreAuth。7: 反射会执行:verifyAuthFunction的hasAnyPermission方法。9:得到2个注解的资源:’vily:user:update’,’vily:user:vue’3: controller类上的@PreAuth:通常是将要替代方法中{}的。4: 方法上@PreAuth: 将通过反射指向具体操作。1:定义注解PreAuth。8:遍历permit。
参考代码:lamp
1:定义注解PreAuth
2:定义aspect,通过切片找到controller类上的@PreAuth和方法上的@PreAuth
3: controller类上的@PreAuth:通常是将要替代方法中{}的
@PreAuth(replace = "vily:user:")
public class VilyPreAuthTestController {
}
4: 方法上@PreAuth: 将通过反射指向具体操作
@PreAuth("hasAnyPermission('{}update','{}vue')")
public R updateTest(){
return R.success();
}
5: 当aspect 切片到方法上注解时,将会得到最终的condition:
hasAnyPermission('vily:user:update','vily:user:vue')
6: 反射:
@Nullable
private Boolean invokePermit(ProceedingJoinPoint point, Method method, String condition) {
StandardEvaluationContext context = new StandardEvaluationContext(verifyAuthFunction);
Expression expression = SP_EL_PARSER.parseExpression(condition);
// 方法参数值
Object[] args = point.getArgs();
context.setBeanResolver(new BeanFactoryResolver(ac));
for (int i = 0; i < args.length; i++) {
MethodParameter mp = new SynthesizingMethodParameter(method, i);
mp.initParameterNameDiscovery(PARAMETER_NAME_DISCOVERER);
context.setVariable(mp.getParameterName(), args[i]);
}
return expression.getValue(context, Boolean.class);
}
7: 反射会执行:verifyAuthFunction的hasAnyPermission方法
public boolean hasAnyPermission(String... permit) {
// 查询当前用户拥有的所有资源
Set<String> resources = getAllResources();
// 判断是否包含所需的角色
return AuthorizingRealm.hasAnyPermission(resources, permit, securityProperties.getCaseSensitive());
}
8:遍历permit
if (permit != null && permit.length > 0) {
Arrays.stream(permit).forEach(System.out::println);
}
9:得到2个注解的资源:’vily:user:update’,’vily:user:vue’
原文地址:https://blog.csdn.net/vily_luky/article/details/135535102
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_55133.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。