2013-01-04 104 views
1

我遇到了使用spring安全性的應用程序的問題。 我有HTTP標籤的這種配置在我的安全配置文件:Spring安全性 - 攔截url映射

<http auto-config="true" use-expressions="true" path-type="regex"> 
    <intercept-url pattern="\A/hero.jsp/$?chooseHero=\Z" access="hasRole('ROLE_HERO')" /> 
    <intercept-url pattern="/.*" access="permitAll" /> 
    <logout logout-success-url="/" />    
</http> 

沒有與第一截流的URL的問題 - 地址不匹配。它基本上意味着任何人都可以訪問我的應用程序的/hero.jsp/$?chooseHero=部分。我錯過了什麼嗎?當僅使用時:

<intercept-url pattern="\A/hero.jsp\Z" access="hasRole('ROLE_HERO')" /> 

一切正常。

我有基於數據庫的認證實施。

請問,有沒有人可以幫我解決這個問題? 謝謝你的任何提示或想法。

+0

我會試着用'$'轉義。 – 2013-01-04 21:09:10

回答

0

第一個攔截URL必須是有效的正則表達式,它由RegexRequestMatcher處理。這是一個奇怪的正則表達式:

pattern="\A/hero.jsp/$?chooseHero=\Z" 

爲什麼你需要$?它的意思是直接匹配(它在正則表達式中有特殊含義)?我想是這樣的...另外,.?special meanings

假設你希望所有字符匹配字面上它必須是這樣的:

pattern="\A/hero\.jsp/\$\?chooseHero=\Z" 

然而,如果一切從字面上匹配爲什麼你需要一個正則表達式呢?您可能希望省去麻煩,只需使用更簡單的Ant-style matchers即可。