Spring Security的Web基礎結構只能通過委托`FilterChainProxy`實例來使用。 安全過濾器本身不應使用。 從理論上講,您可以在應用程序上下文文件中聲明所需的每個Spring Security過濾器bean,并為每個過濾器添加相應的`DelegatingFilterProxy`條目到`web.xml`,確保它們正確排序,但這會很麻煩并且會使 如果您有很多過濾器,請快速使用web.xml文件。` FilterChainProxy`允許我們向web.xml添加一個條目,并完全處理應用程序上下文文件以管理我們的Web安全bean。 它使用`DelegatingFilterProxy`連接,就像上面的例子一樣,但`filter-name`設置為bean名稱“`filterChainProxy`”。 然后,在應用程序上下文中使用相同的bean名稱聲明過濾器鏈。 這是一個例子:
~~~
<bean id="filterChainProxy" class="org.springframework.security.web.FilterChainProxy">
<constructor-arg>
<list>
<sec:filter-chain pattern="/restful/**" filters="
securityContextPersistenceFilterWithASCFalse,
basicAuthenticationFilter,
exceptionTranslationFilter,
filterSecurityInterceptor" />
<sec:filter-chain pattern="/**" filters="
securityContextPersistenceFilterWithASCTrue,
formLoginFilter,
exceptionTranslationFilter,
filterSecurityInterceptor" />
</list>
</constructor-arg>
</bean>
~~~
命名空間元素過濾器鏈用于方便設置應用程序中所需的安全過濾器鏈。 [6]。它將特定的URL模式映射到根據filters元素中指定的bean名稱構建的過濾器列表,并將它們組合在SecurityFilterChain類型的bean中。 pattern屬性采用Ant路徑,最具體的URI應首先出現[7]。在運行時,FilterChainProxy將找到與當前Web請求匹配的第一個URI模式,并且filters屬性指定的過濾器bean列表將應用于該請求。過濾器將按照定義的順序調用,因此您可以完全控制應用于特定URL的過濾器鏈。
您可能已經注意到我們在過濾器鏈中聲明了兩個SecurityContextPersistenceFilter(ASC是allowSessionCreation的縮寫,是SecurityContextPersistenceFilter的一個屬性)。由于Web服務永遠不會出現未來請求的jsessionid,因此為這樣的用戶代理創建HttpSession將是浪費。如果您的大批量應用程序需要最大的可擴展性,我們建議您使用上面顯示的方法。對于較小的應用程序,使用單個SecurityContextPersistenceFilter(默認的allowSessionCreation為true)可能就足夠了。
請注意,FilterChainProxy不會在配置的過濾器上調用標準過濾器生命周期方法。我們建議您使用Spring的應用程序上下文生命周期接口作為替代方法,就像使用任何其他Spring bean一樣。
當我們查看如何使用命名空間配置設置Web安全性時,我們使用了名為“springSecurityFilterChain”的DelegatingFilterProxy。您現在應該能夠看到這是由命名空間創建的FilterChainProxy的名稱。
- 架構
- 9.技術概述
- 9.1 運行環境
- 9.2 核心組件
- 9.2.1 SecurityContextHolder, SecurityContext and Authentication Objects
- 9.2.2 The UserDetailsService
- 9.2.3 GrantedAuthority
- 9.2.4 總結
- 9.3 驗證
- 9.3.1 在Spring Security中驗證是什么
- 9.3.2 直接設置SecurityContextHolder內容
- 9.4 web應用中的驗證
- 9.4.1 ExceptionTranslationFilter
- 9.4.2 AuthenticationEntryPoint
- 9.4.3 驗證機制
- 9.4.4 在請求之間存儲SecurityContext
- 9.5 Spring Security中的訪問控制(授權)
- 9.5.1 Security and AOP Advice
- 9.5.2 Secure Objects and the AbstractSecurityInterceptor
- 什么是配置屬性
- RunAsManager
- AfterInvocationManager
- 擴展安全對象模型
- 9.6 本地化
- 10 核心服務
- 10.1 The AuthenticationManager, ProviderManager and AuthenticationProvider
- 10.1.1 成功驗證時擦除憑據
- 10.1.2 DaoAuthenticationProvider
- 10.2 UserDetailsService實現
- 10.2.1 In-Memory Authentication
- 10.2.2 JdbcDaoImpl
- Authority Groups
- 10.3 Password Encoding
- 10.3.1 密碼發展史
- 10.3.2 DelegatingPasswordEncoder
- 密碼存儲格式
- 密碼編碼
- 密碼比對
- 入門體驗
- 排除故障
- 10.3.3 BCryptPasswordEncoder
- 10.3.4 Pbkdf2PasswordEncoder
- 10.3.5 SCryptPasswordEncoder
- 10.3.6 其他PasswordEncoders
- 10.4 Jackson的支持
- 11 測試方法安全
- 12 集成spring mvc測試
- 13 webflux支持
- 14 安全過濾器鏈
- 14.1 DelegatingFilterProxy
- 14.2 FilterChainProxy
- 14.2.1 繞過過濾鏈
- 14.3 過濾器順序
- 14.4 匹配請求和http防火墻
- 14.5 與其他基于過濾器的框架一起使用
- 14.6 Advanced Namespace Configuration
- 15. 核心的安全過濾器
- 15.1 FilterSecurityInterceptor
- 15.2 ExceptionTranslationFilter
- 15.3 SecurityContextPersistenceFilter
- 15.4 UsernamePasswordAuthenticationFilter