2013-01-04 80 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即可。