为什么春季安全拦截网址有关

时间:2016-01-17 07:08:11

标签: java spring spring-mvc spring-security

所以我有以下示例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用户无法访问搜索。

所以我想知道在订单有效的情况下,这种设计的用例是什么?

如果控制器的情况

@RequestMapping("/simple/*")
public @ResponseBody String simple1() {
    return "Hello world1!";
}

@RequestMapping("/simple/test")
public @ResponseBody String simple2() {
    return "Hello world2!";
}
无论订单如何,

/simple/test都会匹配与simple2相对应的处理程序方法,而不是simple1

1 个答案:

答案 0 :(得分:0)

一般情况下:只要在url-pattern中使用通配符,并且url开始匹配不同的url-patterns,那么顺序就很重要。

典型的用例是允许网址的白名单:除了一些明确定义的网址外,所有内容都被拒绝(或仅限管理员)。使用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')" />

现在订购事宜!