2012-04-29 25 views
1
<security:intercept-url pattern="/person/**" 
     access="isAuthenticated()" /> 


    <security:intercept-url pattern="/person?reg" 
     access="isAnonymous()" /> 

我要爲過濾器攔截所有那些/人的請求/布拉布拉等 的,但應該有一個單一的一個供匿名用戶註冊自理。春季安全請求塊相互矛盾

每當我介紹第一條規則時,所有的子請求都受到保護,包括底層的請求,而不是必需的。

如果我不先介紹底層請求,那麼所有後續請求(如/ person/myProfile)都可以被匿名用戶訪問。

回答

3

Spring Security docs

您可以使用多個元素來定義多套不同的URL的不同訪問需求,但他們會在列出的順序進行評估,第一場比賽將被使用。所以你必須把最具體的比賽放在最上面。

此外,spring默認使用ant風格的模式匹配,在嘗試匹配時不包含參數。你也想匹配一個參數是否存在。爲了做到這一點,您需要通過http上的request-matcher屬性來設置regex matching

<http request-matcher="regex"> 
    <security:intercept-url pattern="\A/person\?reg.*\Z" access="isAnonymous()" /> 

    <security:intercept-url pattern="\A/person/.*\Z" access="isAuthenticated()" /> 
</http> 
+0

是的,我做的是一樣的。 – Aubergine

+0

@Aubergine看到我的編輯 –

+0

我試圖把一個單一的開始,而不是兩個,似乎它的工作。我承認正則表達式的力量,但它似乎是矯枉過正。不管怎樣,謝謝! – Aubergine