(十八)springboot实战——spring securtity注解方式的授权流程源码解析

前言

在上一节内容中,我们介绍了如何在FilterSecurityInterceptor过滤器中处理用户的授权流程,并分析了其源码,spring security还提供了方法级别的授权方式,通过@EnableMethodSecurity注解启用权限认证流程,只需要在方法名上使用@PreAuthorize、@PostAuthorize、@Secured等注解就可以实现具体方法请求的权限配置,是一种更加灵活的配置方式,其底层主要使用方法MethodInterceptor拦截器以及aop切面方法实现。

正文

①使用注解@EnableMethodSecurity开启方法级别的权限验证,在注解@EnableMethodSecurity中引入了方法级别的权限选择器MethodSecuritySelector

②在MethodSecuritySelector组件中导入了切面代理注册器和方法级别的权限配置类PrePostMethodSecurityConfiguration,用于方法级别的权限配置处理

③在PrePostMethodSecurityConfiguration配置类中初始化各种注解方式的权限管理器

 ④所有请求会进入AuthorizationManagerBeforeMethodInterceptor的拦截器方法中,执行invoke方法,调用attemptAuthorization权限认证方法

⑤attemptAuthorization方法中完成用户的授权操作,如果没有授权成功,则直接抛出授权失败的异常,该方法使用了PreAuthorizeAuthorizationManager管理器完成用户的授权操作

⑥以@PreAuthorize为例,在PreAuthorizeAuthorizationManager管理器中实现了该注解方式的权限验证

 ⑦在findPreAuthorizeAnnotation方法中获取到了请求方法中的注解权限

⑧在resolveAttribute方法中获取到了当前用户请求方法的权限表单式

⑨然后调用ExpressionUtils工具类中evaluateAsBoolean方法完成用户权限的校验,后续流程和使用过滤器的权限校验基本一致,这里不会使用投票器,直接使用工具类判断用户权限

 ⑩将授权的结果封装成ExpressionAttributeAuthorizationDecision对象返回

 

结语

关于spring securtity注解方式的授权流程源码解析的内容到这里就结束了,通过以上用户授权管理流程的源码分析,我们基本清楚了spring security方法级别注解方式的权限授权流程,基于此,我们也可以使用拦截器或者aop切面自定义实现我们自己的权限授权流程,这里就不展开介绍了。我们下期见。。。。。。

相关推荐

  1. SpringBoot

    2024-02-10 16:38:01       60 阅读
  2. 10个点介绍SpringBoot3工作流程与核心组件

    2024-02-10 16:38:01       38 阅读

最近更新

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

    2024-02-10 16:38:01       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-02-10 16:38:01       100 阅读
  3. 在Django里面运行非项目文件

    2024-02-10 16:38:01       82 阅读
  4. Python语言-面向对象

    2024-02-10 16:38:01       91 阅读

热门阅读

  1. C#面:Property 和 Attribute 它们各有什么作用

    2024-02-10 16:38:01       55 阅读
  2. app电商系统开发-定制开发-源码交付

    2024-02-10 16:38:01       51 阅读
  3. MinGW/MSYS/GCC/GNU/MSVC/Clang/LLVM都是什么

    2024-02-10 16:38:01       41 阅读
  4. Python基础篇_修饰符(Decorators)【下】

    2024-02-10 16:38:01       43 阅读