1. 程式人生 > >Spring Security Web 5.1.2 原始碼解析 -- 安全相關Filter清單

Spring Security Web 5.1.2 原始碼解析 -- 安全相關Filter清單

名稱 簡介
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屬性Authenticationnull,將其替換為一個AnonymousAuthenticationToken
SessionManagementFilter 檢測從請求處理開始到目前是否有使用者登入認證,如果有做相應的session管理,比如針對為新登入使用者建立新的session(session fixation防護)和設定新的csrf token等。
ExceptionTranslationFilter 處理AccessDeniedExceptionAuthenticationException異常,將它們轉換成相應的HTTP響應
FilterSecurityInterceptor TODO

注意 :

  • 上面的Filter並不總是同時被起用,根據配置的不同,會啟用不同的Filter
  • 對於被起用的Filter,在對一個請求進行處理時,位於以上表格上部的過濾器先被呼叫。
  • 上面的Filter被啟用時並不是直接新增到Servlet容器的Filter chain中,而是先被組織成一個FilterChainProxy, 然後這個Filter會被新增到Servlet容器的Filter chain中。

    FilterChainProxy也是一個Filter,它應用了代理模式和組合模式,它將上面的各個Filter組織到一起在自己內部形成一個filter chain,當自己被呼叫到時,它其實把任務代理給自己內部的filter chain完成。