Security Interceptor

DelegatingFilterProxy:

它將過濾器的方法委派到從applicationContext中獲取到的benn上,這個bean必須實現javax.servlet.Filter接口,而且該filter的name必須和filtername元素中的一樣。

核心過濾器:

FilterSecurityInterceptor:該過濾器負責處理HTTP資源的安全,它需要持有AuthenticationManager和AccessDecisionManager的引用,也可以配置不同的 HTTP URL 的資源。

<bean id="filterSecurityInterceptor"
class="org.springframework.security.web.access.intercept.FilterSecurityInterceptor">
<property name="authenticationManager" ref="authenticationManager"/>
<property name="accessDecisionManager" ref="accessDecisionManager"/>
<property name="securityMetadataSource">
<security:filter-security-metadata-source>
<security:intercept-url pattern="/secure/super/**" access="ROLE_WE_DONT_HAVE"/>
<security:intercept-url pattern="/secure/**" access="ROLE_SUPERVISOR,ROLE_TELLER"/>
</security:filter-security-metadata-source>
</property>
</bean>

ExceptionTranslationFilter
springsecurity中最核心的組件之一就是Interceptor,主要是 AbstractSecurityInterceptor和兩個具體的實現FilterSecurityInterceptor,MethodSecurityInterceptor。攔截器的作用主要是決定一個請求是否被允許訪問一個受保護的資源。FilterSecurityInterceptor主要處理web url的請求,而MethodSecurityInterceptor主要處理方法的請求。
Interceptor 工作原理:
Interceptor 主要有一個前置處理和一個后置處理過程,在前置處理階段,它會看看要訪問的資源是不是被保護的,如果不是的話,請求就可以繼續。如果是的話,攔截器就會從SecurityContext里面獲取Authentication對象,如果用戶是被認證通過, AccessDecisionManager將會被調用來決定這個被認證的對象能不能訪問資源。
當這個用戶權限不夠時(不能訪問資源),就會拋出AccessDeniedException異常。當能夠訪問時, Authentication對象將會被傳遞給RunAsManager(該對象配置了)。下面是一個簡單的時序圖:


學習.png
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容