SpringSecurity 採用的是責任鏈的設計模式,它有一條很長的過濾器鏈。如今對這條過濾器鏈的各個進行說明:設計模式
WebAsyncManagerIntegrationFilter:將 Security 上下文與 Spring Web 中用於處理異步請求映射的 WebAsyncManager 進行集成。緩存
SecurityContextPersistenceFilter:在每次請求處理以前將該請求相關的安全上下文信息加載到 SecurityContextHolder 中,而後在該次請求處理完成以後,將 SecurityContextHolder 中關於此次請求的信息存儲到一個「倉儲」中,而後將 SecurityContextHolder 中的信息清除,例如在Session中維護一個用戶的安全信息就是這個過濾器處理的。安全
HeaderWriterFilter:用於將頭信息加入響應中。cookie
CsrfFilter:用於處理跨站請求僞造。session
LogoutFilter:用於處理退出登陸。異步
UsernamePasswordAuthenticationFilter:用於處理基於表單的登陸請求,從表單中獲取用戶名和密碼。默認狀況下處理來自 /login 的請求。從表單中獲取用戶名和密碼時,默認使用的表單 name 值爲 username 和 password,這兩個值能夠經過設置這個過濾器的usernameParameter 和 passwordParameter 兩個參數的值進行修改。設計
DefaultLoginPageGeneratingFilter:若是沒有配置登陸頁面,那系統初始化時就會配置這個過濾器,而且用於在須要進行登陸時生成一個登陸表單頁面。對象
BasicAuthenticationFilter:檢測和處理 http basic 認證。資源
RequestCacheAwareFilter:用來處理請求的緩存。rem
SecurityContextHolderAwareRequestFilter:主要是包裝請求對象request。
AnonymousAuthenticationFilter:檢測 SecurityContextHolder 中是否存在 Authentication 對象,若是不存在爲其提供一個匿名 Authentication。
SessionManagementFilter:管理 session 的過濾器
ExceptionTranslationFilter:處理 AccessDeniedException 和 AuthenticationException 異常。
FilterSecurityInterceptor:能夠看作過濾器鏈的出口。
RememberMeAuthenticationFilter:當用戶沒有登陸而直接訪問資源時, 從 cookie 裏找出用戶的信息, 若是 Spring Security 可以識別出用戶提供的remember me cookie, 用戶將沒必要填寫用戶名和密碼, 而是直接登陸進入系統,該過濾器默認不開啓。 ---------------------