spring-security(二)

spring-security(二)

基于spring security 4.2.x.RELEASE

AbstractSecurityInterceptor

spring security框架中非常重要的组成部分就是AbstractSecurityInterceptorAbstractSecurityInterceptor的两个重要的实现FilterSecurityInterceptorMethodSecurityInterceptor控制决定是否可以访问受保护的资源。MethodSecurityInterceptor,顾名思义,就是在调用方法(method)的时候就会直接处理这个请求,而FilterSecurityInterceptor是处理Web URL的请求

这里写图片描述

Security Interceptor分为前置处理过程(preprocessing step)和后置处理过程(postprocessing step),它查看所请求的资源是否与某些元数据(metadata)信息(or ConfigAttribute)相关联,如果不相关,则请求继续它的方式请求url或者是方法,如果请求的资源是受保护的,则Security Interceptor会从当前的SecurityContext中检索认证对象(Authentication object),如果有必要,会通过已配置的AuthenticationManagerAuthentication object进行认证。如果对象已经被认证,然后调用AccessDecisionManager去决策这个已经认证的实体最终是否可以访问资源,如果配置了RunAsManager,就会将Authentication object交给它,RunAsManager会返回null,或者是一个伤全新的Authentication object包含了和原始认证对象(original Authentication object)一样的身份(principal)、凭证(credentials)和已经授权的权限(granted authorities),加上一些基于RUN_AS的一组权限将会被用上,新的认证对象(Authentication object)将会放在当前的SecurityContext中,如果没有配置RunAsManager,不进行任何操作

处理完这个之后,Security Interceptor会一个新的包含SecurityContextConfigAttributes信息的InterceptorStatusToken对象,这个InterceptorStatusToken将会被用于之后的后置处理过程。此时,Security Interceptor准备允许去访问受保护的资源了。请求继续,当请求返回时,后置处理阶段就开始了。后置处理阶段比较简单,仅仅是调用了AfterInvocationManager(如果配置了的话)的decide方法,而在AfterInvocationManager的实现中代理了一系列的AfterInvocationProvider,主要是过滤结果或者是抛出AccessDeniedException异常

猜你喜欢

转载自blog.csdn.net/u013887008/article/details/80889526