Spring Auth授权策略

参考代码: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,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,vue'

相关推荐

  1. 授权策略(authorize方法)

    2024-01-12 09:56:04       60 阅读
  2. Spring Auth授权策略

    2024-01-12 09:56:04       49 阅读
  3. .Net Core Policy 基于策略授权

    2024-01-12 09:56:04       58 阅读
  4. Kubernetes(k8s)的授权(Authorization)策略解析

    2024-01-12 09:56:04       24 阅读
  5. macOS sandbox 文件夹授权

    2024-01-12 09:56:04       52 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-12 09:56:04       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-12 09:56:04       101 阅读
  3. 在Django里面运行非项目文件

    2024-01-12 09:56:04       82 阅读
  4. Python语言-面向对象

    2024-01-12 09:56:04       91 阅读

热门阅读

  1. linux下驱动学习—平台总线 (3)

    2024-01-12 09:56:04       58 阅读
  2. uniapp-x uts 介绍

    2024-01-12 09:56:04       58 阅读
  3. Android 车联网——CarDiagnosticService介绍(十八)

    2024-01-12 09:56:04       57 阅读
  4. Mysql字段的各种时间类型

    2024-01-12 09:56:04       56 阅读
  5. 无人机群ros通信

    2024-01-12 09:56:04       54 阅读
  6. Linux中如何更换yum源

    2024-01-12 09:56:04       47 阅读
  7. 编程江湖:Python探秘之旅-----数据结构的迷宫(四)

    2024-01-12 09:56:04       56 阅读
  8. 【Axure视频教程】可视化饼图

    2024-01-12 09:56:04       61 阅读
  9. GitHub SSH 身份验证原理

    2024-01-12 09:56:04       51 阅读
  10. QtService、托盘程序使用

    2024-01-12 09:56:04       64 阅读
  11. 使用OpenGL 和 opengl ES 渲染YUV图片文件的QT示例

    2024-01-12 09:56:04       58 阅读