前言
在上一节内容中,我们介绍了如何在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切面自定义实现我们自己的权限授权流程,这里就不展开介绍了。我们下期见。。。。。。