Spring Security提供了很多過濾器,它們攔截Servlet請求,並將這些請求轉交給認證處理過濾器和訪問角色處理過濾器,認證用戶身份和用戶權限,以保證web資源的安全性
SecurityContextPersistenceFilter
用途:位於過濾器的頂端。
1:在執行其它過濾器之前,判斷用戶的session中是否已經存在了一個SecurityContext上下文,如果存在,就放入SecurityContextHolder中;否則則創建。
2:在執行完其它的過濾器之後,清空SecurityContextHolder中的內容,因爲SecurityContextHolder是基於ThreadLocal的。
LogoutFilter
用途:用於註銷請求。
1:在用戶發送註銷請求時,銷燬用戶的session,並清空SecurityContextHolder,重定向到註銷成功頁面。
2:與記住密碼功能結合的時候,可以清空用戶的cookie。
AbstractAuthenticationProcessingFilter
用途:處理Form登錄過濾器,與form登錄相關的所有請求都在此處理的。
1:通過用戶登錄的用戶名和密碼是否有效,如果成功就跳轉到成功頁面。
DefaultLoginPageGeneratingFilter
用途:用來生成一個默認的登錄頁面。(幾乎不用)
BasicAuthenticationFilter
用途:用來做Basic認證的。
SecurityContextHolderAwareRequestFilter
用途:包裝用戶的請求,目的是爲後面的程序提供額外的數據。
RememberMeAuthenticationFilter
用途:記住密碼功能。依賴Cookie實現。
AnonymousAuthenticationFilter
用途:保證操作的統一性,當用戶沒有登錄時,用戶操作頁面的時候爲用戶默認分配匿名用戶的權限。
ExceptionTranslationFilter
用途:針對於過濾器拋出的異常,然後將請求重定向到對應頁面或錯誤代碼,在項目中我們都會對其進行處理。
SessionManagementFilter
用途:防禦回話僞造***,主要在用戶登錄成功之後,銷燬用戶的當前session,並重新生成一個session。
FilterSecurityInterceptor
用途:用戶的權限控制都包含在這個過濾器中,
1:如果用戶尚未登錄,則拋出尚未認證的異常。
2:如果用戶已經登錄,但是沒有訪問當前資源的權限,則拋出拒絕訪問的異常。
3;如果用戶已經登錄,有訪問當前資源的權限,則放進。
上面這些攔截器是按怎樣的順序執行的呢?FilterChainProxy
安裝順序來調用一組Filter,使這些Filter既能完成認證授權的本職工作,又能享用Spring IOC的功能。