所以我有示例 Spring 安全设置,如下 -
<security:intercept-url pattern="/accounts/search"
access="hasAnyRole('ROLE_VIEWER')" />
<security:intercept-url pattern="/accounts/*"
access="hasAnyRole('ROLE_ADMIN')" />
如上所述,具有角色 ROLE_VIEWER
的用户应该能够访问 /accounts/search
,而具有角色 ROLE_ADMIN
的用户也可以访问以 /accounts
开头的所有工作流程。此处,具有 ROLE_ADMIN
的用户无法访问搜索。
所以我想知道这种顺序很重要的设计的用例是什么?
如果是 Controller
@RequestMapping("/simple/*")
public @ResponseBody String simple1() {
return "Hello world1!";
}
@RequestMapping("/simple/test")
public @ResponseBody String simple2() {
return "Hello world2!";
}
/simple/test
将匹配对应于 simple2
而不是 simple1
的处理程序方法,无论顺序如何。
最佳答案
一般来说:一旦您在 url 模式中使用通配符,并且 url 开始匹配不同的 url 模式,那么顺序就很重要。
一个典型的用例是允许的 url 的白名单:除了一些明确定义的 url 之外,所有内容都被拒绝(或仅针对管理员)。使用 Spring Security,您通常可以这样配置白名单:
<!-- explicit allowed urls -->
<security:intercept-url pattern="/somethingAllowd" access="permitAll" />
...
<!-- "catch all" that deny all not explicit allowed urls except for admns -->
<security:intercept-url pattern="/**" access="hasAnyRole('ROLE_ADMIN')" />
现在顺序很重要!
关于java - 为什么 Spring Security 拦截 url 顺序很重要,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34836016/