spring安全过滤器链url模式匹配

时间:2013-06-20 02:21:41

标签: spring-security

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

如文件中所述:

  

可以使用多个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标记内的过滤器链处理。但是为什么它会给interlay-url标签一个“匹配所有”模式:“/ **”?

不是重复吗?

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

1 个答案:

答案 0 :(得分:1)

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

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

  3. 典型的模式是,您将有一个<http>元素,其中包含多个<intercept-url>元素,这些元素定位于不同的网址格式。当您希望身份验证和访问控制的行为不同时,其他<http>元素可能很有用,例如REST API端点的会话管理或身份验证失败处理程序。