我在使用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有问题-地址不匹配。这基本上意味着任何人都可以访问我的应用程序的/Herm.jsp/$?chooseHero=部分。我是不是遗漏了什么?仅当使用时:
<intercept-url pattern="\A/hero.jsp\Z" access="hasRole('ROLE_HERO')" />一切都运行得很好。
我已经实现了基于数据库的身份验证。
你能帮我解决这个问题吗?感谢您的任何提示或想法。
发布于 2013-01-05 22:33:57
第一个截取的URL必须是有效的正则表达式,它由RegexRequestMatcher处理。这是一个奇怪的正则表达式:
pattern="\A/hero.jsp/$?chooseHero=\Z"为什么需要$?它是否意味着字面上的匹配(它在正则表达式中有特殊的含义)?我想是的..。此外,.和?都有special meanings。
假设您希望所有字符都按字面意思匹配,则必须如下所示:
pattern="\A/hero\.jsp/\$\?chooseHero=\Z"但是,如果所有内容都完全匹配,那么为什么还需要正则表达式呢?您可能希望省去这些麻烦,只使用更简单的Ant-style matchers。
https://stackoverflow.com/questions/14164804
复制相似问题