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

前言

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

正文

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

(十八)springboot实战——spring securtity注解方式的授权流程源码解析_第1张图片

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

(十八)springboot实战——spring securtity注解方式的授权流程源码解析_第2张图片

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

(十八)springboot实战——spring securtity注解方式的授权流程源码解析_第3张图片

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

(十八)springboot实战——spring securtity注解方式的授权流程源码解析_第4张图片

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

(十八)springboot实战——spring securtity注解方式的授权流程源码解析_第5张图片

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

(十八)springboot实战——spring securtity注解方式的授权流程源码解析_第6张图片

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

(十八)springboot实战——spring securtity注解方式的授权流程源码解析_第7张图片

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

(十八)springboot实战——spring securtity注解方式的授权流程源码解析_第8张图片

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

(十八)springboot实战——spring securtity注解方式的授权流程源码解析_第9张图片

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

(十八)springboot实战——spring securtity注解方式的授权流程源码解析_第10张图片

 

结语

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

你可能感兴趣的:(#,springboot,spring,boot,spring,java)