<security:intercept-url pattern="/person/**"
access="isAuthenticated()" />
<security:intercept-url pattern="/person?reg"
access="isAnonymous()" />
我希望过滤器拦截所有/ person / blabla等请求。 但是匿名用户应该有一个可以自己注册的。
每当我引入第一条规则时,所有子请求都会受到保护,包括底层请求不是必需的。
如果我不先介绍,则允许底部请求,但匿名用户也可以访问所有后续请求,例如/ person / myProfile。
答案 0 :(得分:3)
您可以使用多个元素为不同的URL集定义不同的访问要求,但它们将按列出的顺序进行评估,并将使用第一个匹配项。所以你必须把最具体的比赛放在最上面。
此外,spring默认使用ant样式模式匹配,在尝试匹配时不包括参数。您还希望匹配参数是否存在。为此,您需要通过regex matching上的request-matcher
属性设置http
。
<http request-matcher="regex">
<security:intercept-url pattern="\A/person\?reg.*\Z" access="isAnonymous()" />
<security:intercept-url pattern="\A/person/.*\Z" access="isAuthenticated()" />
</http>