[英]ldap search in java - finding all groups with a specific user in it
鉴于以下 ldap 结构(或多或少)
C=NO
-o=mydomain
--cn=groups
---cn=group1
----uid=bob,cn=users,o=mydomain,C=NO
---cn=group2
----uid=bob,cn=users,o=mydomain,C=NO
----uid=odd,cn=users,o=mydomain,C=NO
--cn=users
---uid=bob,cn=Robert,sn=Johnsen
---uid=odd,cn=Odd,sn=Olsen
我使用以下 url= ldap://server:port/o=mydomain,C=NO
然后我可以通过类似这样的搜索基本上检索整个树:
NamingEnumeration results = ctx.search("cn=groups", "cn=*", constraints);
其中约束是
constraints.setSearchScope(SearchControls.SUBTREE_SCOPE);
但是,我只想接收包含特定用户的组。 我已经尝试了很多很多变体,比如
NamingEnumeration results = ctx.search("cn=groups"
, "(&(uid={0},cn=users,o=fund,C=NO)(cn=*))"
, new Object[] {"odd"}
, constraints);
但我只得到空的结果。 似乎全有或全无......我怀疑问题在于 cn=* 和 uid=odd 在树中的不同级别,例如。 uid=是一个属性,但是cn=*是上一级的节点?
我将如何以更有效的方式完成此搜索,而不仅仅是检索所有内容并在客户端对其进行解析?
您的 LDAP 结构看起来很奇怪。
什么是像cn=group1
这样的对象类? 这是“组织单位”还是“组”?
在通常的目录中,用户是在基于“organizationalUnits”类的对象下创建的,并且为了管理需要,它们被分组在一个称为“group”类对象的“成员”的属性中。
在这种情况下,LDAP 过滤器将类似于:
(&(objectClass=group)(member=uid={0},cn=users,o=fund,C=NO))
对于您描述的架构,您可能会查看一个名为ExtensibleMatch的功能,该功能似乎在这篇 wiki 文章中得到了正确解释。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.