1

我在使用 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>

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

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

一切正常。

我实现了基于数据库的身份验证。

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

4

1 回答 1

0

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

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

为什么需要$? 它是否意味着按字面意思匹配(它在正则表达式中具有特殊含义)?我想是这样的......还有,.并且?特殊的含义

假设您希望所有字符都按字面匹配,它必须是这样的:

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

但是,如果所有内容都按字面意思匹配,为什么还需要正则表达式呢?您可能想省去麻烦,只使用更简单的Ant 样式匹配器

于 2013-01-05T14:33:56.597 回答