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