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

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

官方文檔地址

Spring Security?官方文檔地址?

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

三個(gè)重要類(lèi)

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

  • DelegatingFilterProxy
  • FilterChainProxy
  • SecurityFilterChain

下文圍繞這三個(gè)核心類(lèi)進(jìn)行展開(kāi)。

容器中的過(guò)濾器

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

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

?

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

需要注意的是?DelegatingFilterProxy?是?Spring?框架中類(lèi),而非?Spring Security?中。

管理多個(gè)過(guò)濾器鏈?

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

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

?

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

FilterChainProxy?管理一系列名為 SecurityFilterChain?過(guò)濾器鏈。

常用過(guò)濾器

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

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

  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)用過(guò)濾器,可能會(huì)略過(guò)一些過(guò)濾器,但順序不會(huì)變。

?

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

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