Spring ACL问题

时间:2011-08-04 11:09:11

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

我正在使用新的Spring Security 3.1,并对Spring Security ACL提出了一些问题。

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

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

  3. ACL拥有所有者。主人是什么?它对ACL或ACL条目起什么作用?

2 个答案:

答案 0 :(得分:1)

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

我做的是:

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

查看Spring源代码并了解它是如何完成的。

答案 1 :(得分:0)

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