Spring Security Web 5.1.2 原始碼解析 -- 安全相關Filter清單
阿新 • • 發佈:2018-12-12
名稱 | 簡介 |
---|---|
WebAsyncManagerIntegrationFilter |
TODO |
SecurityContextPersistenceFilter |
整個請求處理過程所需的安全上下文物件SecurityContext 的準備和清理不管請求是否針對需要登入才能訪問的頁面,這裡都會確保 SecurityContextHolder 中出現一個SecurityContext 物件:1.未登入狀態訪問登入保護頁面:空 SecurityContext 物件,所含Authentication null 2.登入狀態訪問某個頁面:從 SecurityContextRepository 獲取的SecurityContext 物件 |
HeaderWriterFilter |
將指定的頭部資訊寫入響應物件 |
CsrfFilter |
對請求進行csrf 保護 |
LogoutFilter |
檢測使用者退出登入請求並做相應退出登入處理 |
UsernamePasswordAuthenticationFilter |
檢測使用者名稱/密碼錶單登入認證請求並作相應認證處理: 1. session session (session fixation 防護)和設定新的csrf token 等2.經過完全認證的 Authentication 物件設定到SecurityContextHolder 中的SecurityContext 上;3.釋出登入認證成功事件 InteractiveAuthenticationSuccessEvent 4.登入認證成功時的 Remember Me 處理5.登入認證成功時的頁面跳轉 |
DefaultLoginPageGeneratingFilter |
生成預設的登入頁面 |
DefaultLogoutPageGeneratingFilter |
生成預設的退出登入頁面 |
BasicAuthenticationFilter |
檢測和處理http basic認證 |
RequestCacheAwareFilter |
提取請求快取中快取的請求 1.請求快取在安全機制啟動時指定 2.請求寫入快取在其他地方完成 3.典型應用場景: 1.使用者請求保護的頁面, 2.系統引導使用者完成登入認證, 3.然後自動跳轉到到使用者最初請求頁面 |
SecurityContextHolderAwareRequestFilter |
包裝請求物件使之可以訪問SecurityContextHolder ,從而使請求真正意義上擁有介面HttpServletRequest 中定義的getUserPrincipal 這種訪問安全資訊的能力 |
RememberMeAuthenticationFilter |
針對Remember Me 登入認證機制的處理邏輯 |
AnonymousAuthenticationFilter |
如果當前SecurityContext 屬性Authentication 為null ,將其替換為一個AnonymousAuthenticationToken |
SessionManagementFilter |
檢測從請求處理開始到目前是否有使用者登入認證,如果有做相應的session 管理,比如針對為新登入使用者建立新的session (session fixation 防護)和設定新的csrf token 等。 |
ExceptionTranslationFilter |
處理AccessDeniedException 和 AuthenticationException 異常,將它們轉換成相應的HTTP響應 |
FilterSecurityInterceptor |
TODO |
注意 :
- 上面的
Filter
並不總是同時被起用,根據配置的不同,會啟用不同的Filter
。 - 對於被起用的
Filter
,在對一個請求進行處理時,位於以上表格上部的過濾器先被呼叫。 - 上面的
Filter
被啟用時並不是直接新增到Servlet
容器的Filter chain
中,而是先被組織成一個FilterChainProxy
, 然後這個Filter
會被新增到Servlet
容器的Filter chain
中。FilterChainProxy
也是一個Filter
,它應用了代理模式和組合模式,它將上面的各個Filter
組織到一起在自己內部形成一個filter chain
,當自己被呼叫到時,它其實把任務代理給自己內部的filter chain
完成。