0

我是 Spring 安全的新手。现在我正在阅读它的文档。我对它的过滤器链 url 模式有疑问:

如文档中所述:

可以使用多个 http 元素为不同的 URL 模式定义不同的安全配置。每个元素在内部 FilterChainProxy 和应该映射到它的 URL 模式中创建一个过滤器链。元素将按照它们声明的顺序添加,因此必须再次首先声明最具体的模式。

它还举了一个例子:

  <!-- Stateless RESTful service using Basic authentication -->
  <http pattern="/restful/**" create-session="stateless">
    <intercept-url pattern='/**' access='ROLE_REMOTE' />
    <http-basic />
  </http>

我不明白的是:已经为 http 标签配置了一个 URL 模式“/restful/**”,这意味着所有匹配这个模式的请求都将由这个 http 标签内的过滤器链处理。但是为什么它给拦截URL标签一个“匹配所有”模式:“/**”?

不是重复的吗?

另外,如果真的想给出另一种模式,“/restful/**”不是更好吗?原因“/**”将匹配与“/restful/**”不匹配的 URL,因此不会被此过滤器链处理。

4

1 回答 1

1
  1. 如果没有 inside 的<intercept-url>标签<http>,这个声明基本上是说任何人都可以访问/restful/**路径下的任何资源。这里<intercept-url>限制了对已分配ROLE_REMOTE角色的用户的访问,这是完全不同的。

  2. <intercept-url>模式是相对于封闭<http>元素模式的,因此/restful/**此声明将拦截路径之外的任何内容。

典型的模式是您将在一个<http>元素中包含多个<intercept-url>元素,以针对不同的 URL 模式。当您希望身份验证和访问控制表现不同时,其他<http>元素可能很有用,例如 REST API 端点的会话管理或身份验证失败处理程序。

于 2013-06-20T03:26:12.333 回答