(十八)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切面自定义实现我们自己的权限授权流程,这里就不展开介绍了。我们下期见。。。。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

厉害哥哥吖

您的支持是我创作下去的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值