Java 什么是遍历LDAP DIT的正确方法?

Java 什么是遍历LDAP DIT的正确方法?,java,ldap,ldap-query,Java,Ldap,Ldap Query,我不熟悉LDAP协议和服务器,所以如果我问了另一个小问题,请原谅我。假设我有以下带有嵌套组的LDAP DIT dn: dc=example,dc=com objectClass: top objectClass: domain dc: example # Create a place where users are stored dn: ou=Users, dc=example, dc=com ou: Users description: All strongbox users. object

我不熟悉LDAP协议和服务器,所以如果我问了另一个小问题,请原谅我。假设我有以下带有嵌套组的LDAP DIT

dn: dc=example,dc=com
objectClass: top
objectClass: domain
dc: example

# Create a place where users are stored
dn: ou=Users, dc=example, dc=com
ou: Users
description: All strongbox users.
objectclass: organizationalUnit

# Create users
dn: uid=tcruise,ou=Users,dc=example,dc=com
objectClass: inetOrgPerson
objectClass: organizationalPerson
objectClass: person
objectClass: top
uid: tcruise
cn: Tom Cruise
mail: tcruise@example.com
givenName: Tom
surname: Cruise
userPassword: password

dn: uid=sspielberg,ou=Users,dc=example,dc=com
objectClass: inetOrgPerson
objectClass: organizationalPerson
objectClass: person
objectClass: top
uid: sspielberg
cn: Steven Spielberg
mail: sspielberg@example.com
givenName: Steven
surname: Spielberg
userPassword: password

# Create groups
dn: ou=Groups, dc=example, dc=com
ou: Groups
description: Base group organization unit.
objectClass: organizationalUnit

# Employees
dn: ou=Employees, ou=Groups, dc=example, dc=com
ou: Employees
cn: Employees
description: All employees
objectClass: groupOfUniqueNames
uniqueMember: cn=NULL

# Employees (Actors)
dn: ou=Actors, ou=Employees, ou=Groups, dc=example, dc=com
ou: Actors
cn: Actors
description: All actors
objectClass: groupOfUniqueNames
uniqueMember: uid=tcruise,ou=Users,dc=example,dc=com

# Employees (Directors)
dn: ou=Directors, ou=Employees, ou=Groups, dc=example, dc=com
ou: Directors
cn: Directors
description: All directors
objectClass: groupOfUniqueNames
uniqueMember: uid=sspielberg,ou=Users,dc=example,dc=com
示例中的用户可以分配到多个组,每个组都有特定的授权级别。因此,我需要获取用户分配到的所有组以及它们的父组(即
tcruise-Actors、Employees
)。在这一点上,我找不到任何解决这个问题的例子。我想到的解决方案是:

  • 通过执行
    (&(objectclass=groupOfUniqueNames)(uniqueMember=uid=sspielberg,ou=Users,dc=example,dc=com))向数据库发送查询,检索用户分配给的所有组。
  • 解析组
    dn
    (即按
    拆分,并删除数组中的第一条记录)
  • 查找父对象,同时
    parentGroup objectClass==groupOfUniqueNames

  • 虽然这可能会起作用,但我觉得这不对。我想知道是否有更好的方法达到同样的效果?在大多数LDAP服务器实现(AD除外,因为它们有解决此问题的解决方案)中都可以使用的情况下被认为是
    最佳实践的东西?此外,你能为我提供一个简单的示例代码或可能解决这个问题的链接吗

    如果用户是多个组的成员,则应通过其DN在组的“uniqueMember”属性中的出现直接在每个组中表示。这也适用于父组。不要用DIT这样的结构来表示一组组组,从而使你的生活复杂化。所以你所需要的就是(1)在你的清单上

    或者,Employee应该是一组组组,其成员应该是Director、Actor等,因此当您检索用户的直接成员身份(例如Actor)时,您将启动一个递归操作,查找这些组所属的组,例如Employee、添加、清洗和重复。这可以在大约五行代码中完成