本文介绍: 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进行投诉反馈,一经查实,立即删除!

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注