Spring Security – security none, filters none, access permitAll


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也發生了變化 - 不再在 元素級別指定。Spring 3.1允許定義多個 元素 - 每個元素都有自己的安全過濾器鏈配置。因此,新的安全屬性現在屬於 元素級別。

在實踐中,這將看起來像:

<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”

當使用多個 元素時,有些配置了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上找


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM