spring-security - Spring 安全: Unable to locate a matching ACE for passed permissions and SIDs

标签 spring-security permissions acl access-control

面对Spring Security的DefaultPermissionGrantingStrategy非常令人困惑的行为。请看下面的测试并向我解释一下,为什么它会失败并显示org.springframework.security.acls.model.NotFoundException:无法为传递的权限和SID找到匹配的ACE

@Test
public void testDefaultPermissionGrantingStrategy() {
    Authentication auth = new TestingAuthenticationToken("joe", "ignored", "SYSTEM");
    SecurityContextHolder.getContext().setAuthentication(auth);

    //create ACL which says: "admin" can "ADMINISTER" a secured object with id 9999
    MutableAcl acl = new AclImpl(
              new ObjectIdentityImpl(Object.class, 9999)
            , 1
            , new AclAuthorizationStrategyImpl(new SimpleGrantedAuthority("SYSTEM"))
            , new DefaultPermissionGrantingStrategy(new ConsoleAuditLogger())  // <-- here's the core logic
            , null
            , null
            , false
            , new PrincipalSid("owner"));
    Sid admin = new GrantedAuthoritySid("admin");
    acl.insertAce(0, BasePermission.ADMINISTRATION, admin, true);


    //check if such ACL allows "admin" user "READ" access
    assertTrue(acl.isGranted(Arrays.asList(BasePermission.READ), Arrays.asList(admin), false));

}

让我澄清一下我在这次测试中做了什么以及我期待什么。我为某些安全对象(id = 9999)创建了访问控制列表。之后我添加了“admin”SID“管理”该对象的权限。就是这个。

我的期望是这个 SID 也应该能够“读取”安全对象,因为显然“读取”访问比“管理”访问弱得多。不幸的是,Spring Security DefaultPermissionGrantingStrategy 有不同的意见,测试失败。

我在这里缺少什么,有人可以解释一下吗?

提前致谢!

附注使用Spring 3.2.5-RELEASE

最佳答案

我知道这是一个旧答案,但 Spring ACL 在过去几年中并没有太大变化。

看看这个 AclAuthorizationStrategyImpl.securityCheck(...)源代码,请注意 DefaultPermissionGrantingStrategy 检查进行更改的用户是否是 ACL 记录的所有者,如果不是,它继续检查进行更改的用户是否是 ACL 记录的成员配置的用户组

配置的用户组可以与所有其他用户组分开,并且可以像这样配置:

@Bean
public AclAuthorizationStrategy aclAuthorizationStrategy() {
    return new AclAuthorizationStrategyImpl(new SimpleGrantedAuthority("ROLE_ADMIN"));
}

如果您省略此配置,或者您的配置与包含尝试进行 ACL 更改的用户(不是 ACL 所有者)的实际组名称不匹配,您将收到有点不明确的消息 无法为传递的权限和SID找到匹配的ACE

关于spring-security - Spring 安全: Unable to locate a matching ACE for passed permissions and SIDs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33297269/

相关文章:

php - 使用 Doctrine 构建通用的 OO ACL

java - @PreAuthorize 在一个方法上调用但在另一个方法上不调用

java - 如何在 spring-security 中取消/** URL 模式

spring-security - 如何使用Spring Session + Spring security xml配置和多重安全过滤器

spring-security - 有没有像stackoverflow一样的Spring Security OpenId注册?

Android checkCallingOrSelfPermission 没有正确返回

php - CakePHP 的用户管理、身份验证和 acl 插件?

android - 需要访问联系人的权限才能将应用程序中的联系人信息保存到 native 联系人中吗?

windows - 如何区分 Windows 权限

linux - 如何使用ACL方便多用户conda系统