Spring Security的核心攔截器

1. HttpSessionContextIntegrationFilterspring

位於過濾器頂端,第一個起做用的過濾器。安全

用途一,在執行其餘過濾器以前,率先判斷用戶的session中是否已經存在一個SecurityContext了。若是存在,就把SecurityContext拿出來,放到SecurityContextHolder中,供Spring Security的其餘部分使用。若是不存在,就建立一個SecurityContext出來,仍是放到SecurityContextHolder中,供Spring Security的其餘部分使用。服務器

用途二,在全部過濾器執行完畢後,清空SecurityContextHolder,由於SecurityContextHolder是基於ThreadLocal的,若是在操做完成後清空ThreadLocal,會受到服務器的線程池機制的影響。cookie

 

2. LogoutFiltersession

只處理註銷請求,默認爲/j_spring_security_logout。ide

用途是在用戶發送註銷請求時,銷燬用戶session,清空SecurityContextHolder,idea

而後重定向到註銷成功頁面。能夠與rememberMe之類的機制結合,在註銷的同時清空用戶cookie。spa

 

3. AuthenticationProcessingFilter線程

處理form登錄的過濾器,與form登錄有關的全部操做都是在此進行的。orm

默認狀況下只處理/j_spring_security_check請求,這個請求應該是用戶使用form登錄後的提交地址

此過濾器執行的基本操做時,經過用戶名和密碼判斷用戶是否有效,若是登陸成功就跳轉到成功頁面

(多是登錄以前訪問的受保護頁面,也多是默認的成功頁面),若是登陸失敗,就跳轉到失敗頁面。

 

4. DefaultLoginPageGeneratingFilter

此過濾器用來生成一個默認的登陸頁面,默認的訪問地址爲/spring_security_login,

這個默認的登陸頁面雖然支持用戶輸入用戶名,密碼,也支持rememberMe功能,可是由於太難看了,

只能是在演示時作個樣子,不可能直接用在實際項目中。

 

5. BasicProcessingFilter

此過濾器用於進行basic驗證,功能與AuthenticationProcessingFilter相似,只是驗證的方式不一樣。

 

6. SecurityContextHolderAwareRequestFilter

此過濾器用來包裝客戶的請求。目的是在原始請求的基礎上,爲後續程序提供一些額外的數據。好比getRemoteUser()時直接返回當前登錄的用戶名之類的。

 

7. RememberMeProcessingFilter

此過濾器實現RememberMe功能,當用戶cookie中存在rememberMe的標記,此過濾器會根據標記自動實現用戶登錄,並建立SecurityContext,授予對應的權限。

 

8. AnonymousProcessingFilter

爲了保證操做統一性,當用戶沒有登錄時,默認爲用戶分配匿名用戶的權限。

 

9. ExceptionTranslationFilter

此過濾器的做用是處理中FilterSecurityInterceptor拋出的異常,而後將請求重定向到對應頁面,或返回對應的響應錯誤代碼

 

10. SessionFixationProtectionFilter

防護會話僞造攻擊。有關防護會話僞造的詳細信息

 

11. FilterSecurityInterceptor

用戶的權限控制都包含在這個過濾器中。

功能一:若是用戶還沒有登錄,則拋出AuthenticationCredentialsNotFoundException「還沒有認證異常」。

功能二:若是用戶已登陸,可是沒有訪問當前資源的權限,則拋出AccessDeniedException「拒絕訪問異常」。

功能三:若是用戶已登陸,也具備訪問當前資源的權限,則放行。

全部的過濾器都會實現SpringSecurityFilter安全過濾器。。。

 

image

相關文章
相關標籤/搜索