spring-security(二)
基于spring security 4.2.x.RELEASE
AbstractSecurityInterceptor
spring security框架中非常重要的组成部分就是AbstractSecurityInterceptor
。AbstractSecurityInterceptor
的两个重要的实现FilterSecurityInterceptor
和MethodSecurityInterceptor
控制决定是否可以访问受保护的资源。MethodSecurityInterceptor
,顾名思义,就是在调用方法(method)的时候就会直接处理这个请求,而FilterSecurityInterceptor
是处理Web URL
的请求
Security Interceptor
分为前置处理过程(preprocessing step)和后置处理过程(postprocessing step),它查看所请求的资源是否与某些元数据(metadata)信息(or ConfigAttribute
)相关联,如果不相关,则请求继续它的方式请求url或者是方法,如果请求的资源是受保护的,则Security Interceptor
会从当前的SecurityContext
中检索认证对象(Authentication object
),如果有必要,会通过已配置的AuthenticationManager
对Authentication object
进行认证。如果对象已经被认证,然后调用AccessDecisionManager
去决策这个已经认证的实体最终是否可以访问资源,如果配置了RunAsManager
,就会将Authentication object
交给它,RunAsManager
会返回null,或者是一个伤全新的Authentication object
包含了和原始认证对象(original Authentication object)一样的身份(principal)、凭证(credentials)和已经授权的权限(granted authorities),加上一些基于RUN_AS
的一组权限将会被用上,新的认证对象(Authentication object
)将会放在当前的SecurityContext
中,如果没有配置RunAsManager
,不进行任何操作
处理完这个之后,Security Interceptor
会一个新的包含SecurityContext
和ConfigAttributes
信息的InterceptorStatusToken
对象,这个InterceptorStatusToken
将会被用于之后的后置处理过程。此时,Security Interceptor
准备允许去访问受保护的资源了。请求继续,当请求返回时,后置处理阶段就开始了。后置处理阶段比较简单,仅仅是调用了AfterInvocationManager
(如果配置了的话)的decide
方法,而在AfterInvocationManager
的实现中代理了一系列的AfterInvocationProvider
,主要是过滤结果或者是抛出AccessDeniedException
异常