【问题标题】:Spring ACL questions春季 ACL 问题
【发布时间】:2011-10-19 21:34:05
【问题描述】:

我正在使用新的 Spring Security 3.1,对 Spring Security ACL 有几个问题。

  1. 假设我有一个对象并想为它定义一个 ACL。我创建了一个 ACL 条目并希望将其分配给一组用户;不是一个角色 (GrantedAuthoritySid),不是一个用户 (PrincipalSid),而是一组用户。我到处研究了一个例子,但找不到任何例子。您能否指出一个在这种情况下对我有帮助的示例或课程?

  2. 所以现在我想创建与第一个对象相关的第二个对象(它应该适用于相同的用户)。 例如,这可能是第一个对象的状态更新。我的GrantedAuthorityPrincipal 对第二个对象有不同的权限掩码。 第一个对象也有 2 个GrantedAuthorities (2 ACLEntries),而状态更新只有一个。如果我使用 ACL 继承,则第一个对象的权限集与第二个对象的权限集不匹配。 我的问题是如何对此进行建模,以便两个对象的GrantedAuthorities 自动保持一致,同时保留不同的权限掩码。一个想法是使用复合模式将第二个对象的GrantedAuthority 链接到第一个对象的GrantedAuthority(而不是将其链接到用户)。

  3. ACL 有一个所有者。楼主是为了什么?它对 ACL 或 ACL 条目起什么作用?

【问题讨论】:

    标签: spring-security acl spring-security-acl


    【解决方案1】:

    这有点复杂。我对Spring源代码进行了逆向工程以了解原理,这花了我很多时间。我不能确切地告诉你我是如何实现它的(因为它对我从事的项目非常具体),但会尽量给你一个起点。

    我所做的是:

    • 实现自定义org.springframework.security.acls.sid.Sid。这个Sid 引用的不是authorityuser,而是一种具有id 并引用两个不同对象的组对象。要将此组对象用作Sid,您必须创建一个ACL_Sid 记录,对象的idACL_sid.sidACL_sid.principal 必须是 0 或 1 以外的整数,必须在自定义 LookupStrategy 的测试中进行检查(参见下文和 Spring 源代码)。
    • 扩展org.springframework.security.acls.sid.SidRetrievalStrategyImpl 以从数据库中检索自定义Sid
    • 实现自定义org.springframework.security.acls.jdbc.LookupStrategy。我复制了一个现有的实现(因为该类是最终的)并根据我的需要对其进行了修改。
    • 在 spring 配置中将所有内容连接在一起,因为默认 Spring ACL 配置不需要它必须使用哪些类(而不是默认值)

    查看 Spring 源代码,看看它是如何完成的。

    【讨论】:

    • 自发布后发生了一些变化。 BasicLookupStrategy 不再是最终版本。现在您可以扩展它并覆盖受保护的createSid 方法。另外,acl_sid.principalboolean,所以只能使用 true 或 false(您可以将其切换为 int,但您必须重写 BasicLookupStrategy,这是我们试图避免的) .我决定为每个acl_sid.sid添加一个标记,即group:iduser:id,然后基于此返回Sid的不同实现。
    【解决方案2】:

    要将一个对象分配给一组用户,每个用户都应该有一个针对同一对象的 ACL 条目。这可能会导致大量的 ACL 记录。

    【讨论】:

      猜你喜欢
      • 2016-03-28
      • 2016-09-07
      • 2015-07-25
      • 2016-06-29
      • 2016-12-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多