【问题标题】:Is the permission parameter case-sensitive when using with hasPermission in spring security?在spring security中与hasPermission一起使用时权限参数是否区分大小写?
【发布时间】:2015-09-13 20:48:54
【问题描述】:

以下两行的行为方式是否相同?

@PreAuthorize("hasPermission(#task, 'MANAGER')

@PreAuthorize("hasPermission(#task, 'manager')

另外,权限常量在 CustomPermission.java 中定义如下

 public static final Permission MANAGER    = new CustomPermission(1<<7,'M');

【问题讨论】:

    标签: java spring security spring-security permissions


    【解决方案1】:

    权限参数是否区分大小写?嗯,是的,也不是。如果权限是大写的String 并且您输入了小写的权限,它将起作用。但是,相反的情况不会。

    我检查了 Spring 的源代码。 AclPermissionEvaluatorPermissionEvaluator 的默认实现,它是处理hasPermission() 例程的接口。它首先尝试从原始给定的String 中找到权限。如果没有找到,它会再次尝试调用toUpperCase()

    自己看吧:

    if (permission instanceof String) {
        String permString = (String) permission;
        Permission p;
    
        try {
            p = permissionFactory.buildFromName(permString);
        }
        catch (IllegalArgumentException notfound) {
            p = permissionFactory.buildFromName(permString.toUpperCase());
        }
    
        if (p != null) {
            return Arrays.asList(p);
        }
    
    }
    

    参考:

    https://github.com/spring-projects/spring-security/blob/7b4a37f27e4ba7045bd63656e49ee0d5ee381ce5/acl/src/main/java/org/springframework/security/acls/AclPermissionEvaluator.java

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-10-23
      • 2012-01-02
      • 2018-02-03
      • 1970-01-01
      • 2013-01-13
      • 1970-01-01
      • 2014-05-22
      相关资源
      最近更新 更多