1.概述
Spring Security提供了幾種將請求模式配置為不安全或允許所有訪問的機制。取決於這些機制中的哪一種 - 這可能意味着根本不在該路徑上運行安全過濾器鏈,或者運行過濾器鏈並允許訪問
2. access=”permitAll”
使用access =“permitAll”設置
<intercept-url pattern="/login*" access="permitAll" />
或者,通過Java配置:
http.authorizeRequests().antMatchers("/login*").permitAll();
這是在不禁用安全過濾器的情況下實現的 - 這些過濾器仍在運行,因此任何與Spring Security相關的功能仍然可用。
3. filters=”none”
這是Spring 3.1之前的功能,已在Spring 3.1中棄用並替換。
filters屬性完全在該特定請求路徑上禁用Spring Security過濾器鏈:
<intercept-url pattern="/login*" filters="none" />
當請求的處理需要Spring Security的某些功能時,這可能會導致問題。
由於這是一個不推薦使用的功能Spring版本高於3.0,使用它與Spring 3.1將導致啟動時的運行時異常:
SEVERE: Context initialization failed
org.springframework.beans.factory.parsing.BeanDefinitionParsingException:
Configuration problem: The use of "filters='none'" is no longer supported.
Please define a separate <http> element for the pattern you want to exclude
and use the attribute "security='none'".
Offending resource: class path resource [webSecurityConfig.xml]
at o.s.b.f.p.FailFastProblemReporter.error(FailFastProblemReporter.java:68)
4. security=”none”
正如我們在上面的錯誤消息中看到的那樣,Spring 3.1用一個新的表達式替換filters =“none” - security =“none”。
scope也發生了變化 - 不再在
在實踐中,這將看起來像:
<http pattern="/resources/**" security="none"/>
或者使用Java配置:
web.ignoring().antMatchers("/resources/**");
而不是舊的:
<intercept-url pattern="/resources/**" filters="none"/>
與filters =“none”類似,這也將完全禁用該請求路徑的安全過濾器鏈。因此,當在應用程序中處理請求時,Spring Security功能將不可用。對於上面的示例而言,這不是問題,其主要涉及提供靜態資源 - 其中不進行實際處理。但是,如果以某種方式以編程方式處理請求 - 那么安全功能(例如,需求通道,訪問當前用戶或調用安全方法)將不可用。
出於同樣的原因,沒有必要在已經使用security =“none”配置的
或者,access ='IS_AUTHENTICATED_ANONYMOUSLY'可用於允許匿名訪問。
5. 注意事項:security=”none”
當使用多個
另請注意,如果
Caused by: java.lang.IllegalArgumentException: A universal match pattern ('/**')
is defined before other patterns in the filter chain, causing them to be ignored.
Please check the ordering in your <security:http> namespace or FilterChainProxy bean configuration
at o.s.s.c.h.DefaultFilterChainValidator.checkPathOrder(DefaultFilterChainValidator.java:49)
at o.s.s.c.h.DefaultFilterChainValidator.validate(DefaultFilterChainValidator.java:39)
六,結論
本文討論了允許使用Spring Security訪問路徑的選項 - 重點關注filters =“none”,security =“none”和access =“permitAll”之間的差異。
像往常一樣,這些例子可以在GitHub上找到。