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

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

官方文檔地址

Spring Security?官方文檔地址?

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

三個(gè)重要類

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

  • DelegatingFilterProxy
  • FilterChainProxy
  • SecurityFilterChain

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

容器中的過濾器

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

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

?

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

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

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

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

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

?

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

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

常用過濾器

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

Spring Security?中有許多過濾器,其的功能均由有下面 32?個(gè)過濾器實(shí)現(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)用過濾器,可能會(huì)略過一些過濾器,但順序不會(huì)變。

?

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

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