當(dāng)前位置:首頁 > IT技術(shù) > 編程語言 > 正文

Spring Security:(三)架構(gòu)
2022-01-01 23:09:02

官方文檔地址

Spring Security?官方文檔地址?

其中重點章節(jié)是?Servlet Applications?這一章節(jié)從?Spring Security?架構(gòu)到使用都講述十分詳盡。本文是官方文檔的閱讀筆記。

三個重要類

Spring Security?的初始化和認(rèn)證授權(quán)是圍繞下面三類展開的:

  • DelegatingFilterProxy
  • FilterChainProxy
  • SecurityFilterChain

下文圍繞這三個核心類進(jìn)行展開。

容器中的過濾器

在 Java?Web?技術(shù)中,有 Servlet Filter Listener?三大組件,三大組件的生命周期都是?Web 容器進(jìn)行管理的。

Spring 提供了一個名為 DelegatingFilterProxy 的 Filter 實現(xiàn)類,其作用是在 Servlet 容器的生命周期和 Spring 的 ApplicationContext 之間進(jìn)行橋接。 Servlet 容器允許使用自己的標(biāo)準(zhǔn)注冊過濾器,但 Servlet?容器并不會接管 Spring Bean。 DelegatingFilterProxy 可以通過標(biāo)準(zhǔn) Servlet 容器機制注冊,但將所有工作委托給實現(xiàn) Filter 的 Spring Bean。

?

因?DelegatingFilterProxy?是一個普通的過濾器,因此當(dāng)請求到達(dá) Web?容器時,DelegatingFilterProxy?會被調(diào)用,接著 DelegatingFilterProxy?會調(diào)用?Spring Bean?中實現(xiàn)?Filter?接口的類中方法。因此可以將過濾器分類兩類,第一類是由?Web?容器進(jìn)行管理,第二類是由 Spring?進(jìn)行管理的,DelegatingFilterProxy?就是連接二者的橋梁。

需要注意的是?DelegatingFilterProxy?是?Spring?框架中類,而非?Spring Security?中。

管理多個過濾器鏈?

Spring Security?中有個十分核心的?Filter?實現(xiàn)類?FilterChainProxy,其作用是用來管理?Spring Security?中各種過濾器鏈(并非 Servlet?容器中的過濾器鏈),可以認(rèn)為是?Spring Security 功能的入口。FilterChainProxy?被包裹在 DelegatingFilterProxy?中,因此調(diào)用時機也由?DelegatingFilterProxy?決定。

Spring?家族中有其他許多成員,各個成員核心功能的入口都不一樣,但是涉及到過濾器的功能,無一例外,都是由?DelegatingFilterProxy?進(jìn)行管理。

?

Servlet?容器管理?FilterChain,而?FilterChain?管理其中多個過濾器,DelegatingFilterProxy?作為其中一個過濾器也被?FilterChain?管理。DelegatingFilterProxy?又包裹了?FilterChainProxy。

FilterChainProxy?管理一系列名為 SecurityFilterChain?過濾器鏈。

常用過濾器

SecurityFilterChain?是一個過濾器鏈,其中包含了許多有序的過濾器(被稱為?Security?Filter)。Spring Security?中有包含了許多的?SecurityFilterChain,而這些?SecurityFilterChain 統(tǒng)一由?FilterChainProxy 調(diào)用。

Spring Security?中有許多過濾器,其的功能均由有下面 32?個過濾器實現(xiàn)的(標(biāo)紅的是較為常用的過濾器):

  1. SecurityContextPersistenceFilter
  2. HeaderWriterFilter
  3. CorsFilter
  4. CsrfFilter
  5. LogoutFilter
  6. OAuth2AuthorizationRequestRedirectFilter
  7. Saml2WebSsoAuthenticationRequestFilter
  8. X509AuthenticationFilter
  9. AbstractPreAuthenticatedProcessingFilter
  10. CasAuthenticationFilter
  11. OAuth2LoginAuthenticationFilter
  12. Saml2WebSsoAuthenticationFilter
  13. UsernamePasswordAuthenticationFilter
  14. OpenIDAuthenticationFilter
  15. DefaultLoginPageGeneratingFilter
  16. DefaultLogoutPageGeneratingFilter
  17. ConcurrentSessionFilter
  18. DigestAuthenticationFilter
  19. BearerTokenAuthenticationFilter
  20. BasicAuthenticationFilter
  21. RequestCacheAwareFilter
  22. SecurityContextHolderAwareRequestFilter
  23. JaasApiIntegrationFilter
  24. RememberMeAuthenticationFilter
  25. AnonymousAuthenticationFilter
  26. OAuth2AuthorizationCodeGrantFilter
  27. SessionManagementFilter
  28. ExceptionTranslationFilter
  29. FilterSecurityInterceptor
  30. SwitchUserFilter

Spring Security?也是按照上面的順序調(diào)用過濾器,可能會略過一些過濾器,但順序不會變。

?

本文摘自 :https://www.cnblogs.com/

開通會員,享受整站包年服務(wù)立即開通 >