2014-10-03 91 views
4

我已經看到了春天的OAuth2安全性已採樣這在spring-servlet.xml定義,春季安全<http>和<攔截,網址>模式屬性

<http pattern="https://stackoverflow.com/users/**" create-session="never" entry-point-ref="oauthAuthenticationEntryPoint" 
     access-decision-manager-ref="accessDecisionManager" xmlns="http://www.springframework.org/schema/security"> 
    <anonymous enabled="false" /> 
    <intercept-url pattern="/photos" access="ROLE_USER,SCOPE_READ" /> 
    <intercept-url pattern="/photos/trusted/**" access="ROLE_CLIENT,SCOPE_TRUST" /> 
    <intercept-url pattern="/photos/user/**" access="ROLE_USER,SCOPE_TRUST" /> 
    <intercept-url pattern="/photos/**" access="ROLE_USER,SCOPE_READ" /> 
    <custom-filter ref="resourceServerFilter" before="PRE_AUTH_FILTER" /> 
    <access-denied-handler ref="oauthAccessDeniedHandler" /> 
</http> 

是在http標籤的pattern屬性是否有效?我無法在spring-security-2.0.1.xsd中找到它的定義。如果它是有效的,這種模式與intercept-urlpattern屬性有什麼關係?舉例來說,攔截路徑/photos/user/**的最終匹配攔截路徑是/users/photos/user/**?謝謝。

回答

8

pattern屬性是在3.1中引入的,它引入了多個過濾器鏈的名稱空間支持。 Spring Security 2已經過時了(你不應該使用它)。

intercept-url元素中的模式是獨立的,因爲它們以與篩選器鏈http模式被檢查相同的方式與傳入的請求URI匹配。但是,如果後者不匹配,則過濾器鏈將不會被應用於請求,因此爲了產生任何效果,它們必須與過濾器鏈式樣一致。

對於您發佈的示例,這意味着/photos模式都不會產生任何影響。它們應該都具有主過濾器鏈匹配的前綴 - 即它們應該以/users/photos開頭。

+0

是否有任何地方提到爲什麼配置是這樣設計的?我的意思是它不直觀,並使整個配置無用,並在我的示例中不被注意。 – thlim 2014-10-04 16:24:19

+3

除了讓這兩個人獨立以外,你還會如何設計它?確定一個螞蟻模式是否被「包含」在另一箇中並不是一個容易的問題。例如,如果過濾器鏈模式是'/ **/users/**'怎麼辦? – 2014-10-04 23:32:19

+1

在我的頭上,我們可能會在模式之間產生失敗的快速路徑衝突,例如,/user/**將與/ user/photos相沖突,它應該被聲明爲內部/ user/** 012模式。/** /用戶或/用戶/ **這樣的/ ** /用戶/ **等強硬模式是非法的。我必須看一些困難的模式來確定我所說的東西。 – thlim 2014-10-05 16:30:04

1

在spring security 4的情況下,角色由haseRole('ADMIN')進行檢查,只需嘗試一下即可。

它適用於我。

+0

這看起來不像是我的答案...請將它作爲評論 – 2016-10-24 08:54:44