Spring security - intercept-url模式映射

时间:2013-01-04 20:52:48

标签: java spring security

我的应用程序遇到了使用spring security的问题。 我的安全配置文件中有这种http标签配置:

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

第一个拦截网址存在问题 - 地址不匹配。它基本上意味着我任何人都可以访问我的应用程序的/hero.jsp/$?chooseHero=部分。我错过了什么吗?仅使用时:

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

一切正常。

我已实施基于数据库的身份验证。

拜托,请问有人帮我解决这个问题吗? 感谢您的任何提示或想法。

1 个答案:

答案 0 :(得分:0)

第一个拦截网址必须是有效的正则表达式,它由RegexRequestMatcher处理。这是一个奇怪的正则表达式:

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

为什么需要$?是否意味着字面匹配(它在正则表达式中有特殊含义)?我想是的......此外,.?还有special meanings

假设您希望所有字符按字面匹配,则必须如下:

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

然而,如果一切都符合字面意思,为什么你需要一个正则表达式呢?您可能想省去麻烦,只需使用更简单的Ant-style matchers