我的应用程序遇到了使用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')" />
一切正常。
我已实施基于数据库的身份验证。
拜托,请问有人帮我解决这个问题吗? 感谢您的任何提示或想法。
答案 0 :(得分:0)
第一个拦截网址必须是有效的正则表达式,它由RegexRequestMatcher处理。这是一个奇怪的正则表达式:
pattern="\A/hero.jsp/$?chooseHero=\Z"
为什么需要$
?是否意味着字面匹配(它在正则表达式中有特殊含义)?我想是的......此外,.
和?
还有special meanings。
假设您希望所有字符按字面匹配,则必须如下:
pattern="\A/hero\.jsp/\$\?chooseHero=\Z"
然而,如果一切都符合字面意思,为什么你需要一个正则表达式呢?您可能想省去麻烦,只需使用更简单的Ant-style matchers。