1
    <security:intercept-url pattern="/person/**" 
        access="isAuthenticated()" />   


    <security:intercept-url pattern="/person?reg"
        access="isAnonymous()" />

我希望过滤器拦截所有 /person/blabla 等请求。但是应该有一个可供匿名用户自行注册的请求。

每当我介绍第一条规则时,所有子请求都受到保护,包括不需要的底部请求。

如果我不先介绍,那么底部请求是允许的,但所有后续请求,例如 /person/myProfile 都可以被匿名用户访问。

4

1 回答 1

3

来自Spring Security 文档

您可以使用多个元素为不同的 URL 集定义不同的访问要求,但它们将按列出的顺序进行评估,并且将使用第一个匹配项。因此,您必须将最具体的匹配项放在顶部。

此外,spring 默认使用 ant 样式的模式匹配,在尝试进行匹配时不包含参数。您还希望匹配参数是否存在。为此,您需要通过on 属性设置正则表达式匹配request-matcherhttp

<http request-matcher="regex">
  <security:intercept-url pattern="\A/person\?reg.*\Z" access="isAnonymous()" />

  <security:intercept-url pattern="\A/person/.*\Z" access="isAuthenticated()" />
</http>
于 2012-04-29T16:04:26.863 回答