我是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 / **”不匹配的网址,因此不会被此过滤器链处理。
答案 0 :(得分:1)
如果<intercept-url>
中没有<http>
标记,则此声明基本上表示任何人都可以访问/restful/**
路径下的任何资源。 <intercept-url>
此处限制了对已分配ROLE_REMOTE
角色的用户的访问权限,这是完全不同的。
<intercept-url>
模式与封闭的<http>
元素模式相关,因此此声明不会拦截/restful/**
路径之外的任何内容。
典型的模式是,您将有一个<http>
元素,其中包含多个<intercept-url>
元素,这些元素定位于不同的网址格式。当您希望身份验证和访问控制的行为不同时,其他<http>
元素可能很有用,例如REST API端点的会话管理或身份验证失败处理程序。