【问题标题】:Why should spring security intercept urls order matter为什么 spring security 拦截 urls 订单很重要
【发布时间】:2016-01-17 07:08:11
【问题描述】:

所以我有如下示例 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 的处理程序方法,无论顺序如何。

【问题讨论】:

    标签: java spring spring-mvc spring-security


    【解决方案1】:

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

    一个典型的用例是允许 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')" />
    

    现在订单很重要!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-12-01
      • 1970-01-01
      • 2012-08-15
      • 2014-06-17
      • 2013-03-17
      • 2013-06-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多