天天看點

Spring Security學習筆記Spring Security of DefaultSecurityFilterChain架構的核心元件

Spring Security of DefaultSecurityFilterChain

SecurityContextPersistenceFilter

INFO 10220 — [ main] o.s.s.web.DefaultSecurityFilterChain : Creating filter chain: any request, [org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter@6d4a82, org.springframework.security.web.context.SecurityContextPersistenceFilter@16d431b4, org.springframework.security.web.header.HeaderWriterFilter@8b13d91, [email protected], org.springframework.security.web.authentication.logout.LogoutFilter@14b4340c, org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter@231cdda8, org.springframework.security.web.savedrequest.RequestCacheAwareFilter@7558633, org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter@45037e16, org.springframework.security.web.authentication.AnonymousAuthenticationFilter@14f060b8, org.springframework.security.web.session.SessionManagementFilter@2589d787, org.springframework.security.web.access.Exce[email protected], org.springframework.s[email protected]]

1 SecurityContextPersistenceFilter

認證相關的資訊

2 UsernamePasswordAuthenticationFilter

調用身份認證器,校驗身份的作用

3 AnonymousAuthenticationFilter

匿名身份的了解是Spirng Security為了整體邏輯的統一性,即使是未通過認證的使用者,也給予了一個匿名身份。意味着隻有在上述身份過濾器執行完畢後,SecurityContext依舊沒有使用者資訊,AnonymousAuthenticationFilter該過濾器才會有意義——給于使用者一個匿名身份。

4 ExceptionTranslationFilter

用來轉換整個鍊路中出現的異常。一般其隻處理兩大類異常:AccessDeniedException通路異常和AuthenticationException認證異常。

5 FilterSecurityInterceptor

通路控制相關的操作,比對使用者擁有的權限和資源所需的權限

架構的核心元件

  • SecurityContextHolder:提供對SecurityContext的通路
  • SecurityContext,:持有Authentication對象和其他可能需要的資訊
  • AuthenticationManager 其中可以包含多個AuthenticationProvider
  • ProviderManager對象為AuthenticationManager接口的實作類
  • AuthenticationProvider 主要用來進行認證操作的類 調用其中的authenticate()方法去進行認證操作
  • Authentication:Spring Security方式的認證主體
  • GrantedAuthority:對認證主題的應用層面的授權,含目前使用者的權限資訊,通常使用角色表示
  • UserDetails:建構Authentication對象必須的資訊,可以自定義,可能需要通路DB得到
  • UserDetailsService:通過username建構UserDetails對象,通過loadUserByUsername根據userName擷取UserDetail對象 (可以在這裡基于自身業務進行自定義的實作 如通過資料庫,xml,緩存擷取等)

繼續閱讀