我两天前刚收到这个要求,我第一次使用LDAP(openDS)。事实上,我对R& D的时间非常有限。我已经尽可能地浏览了开发人员指南和针对openDS的SDK Api。
基本上我有一个非常简单的要求。我将获得一个' user-id '并使用我必须验证此用户是否属于LDAP中的任何可用组(由我定义)。
我已设法执行此代码段:
public void getGroup(String userId) {
Connection connection = new LDAPConnection().getConnection();
try {
// No explicit bind yet so we remain anonymous for now.
SearchResultEntry entry;
entry = connection.searchSingleEntry("ou=Groups,dc=example,dc=com",
SearchScope.WHOLE_SUBTREE,
"(uniqueMember=" + "uid="+userId+", ou=People, dc=example,dc=com" + ")",
"cn");
String cn = entry.getAttribute("cn").firstValueAsString();
System.out.println("Hello, " + cn + "!");
} catch (ErrorResultException e) {
e.getMessage();
} finally {
closeConnection(connection);
}
}
现在,如果我收到搜索结果,则该用户属于某个组,否则不属于该组。现在我不确定这是实现这一目标的方法。我也看起来像'isMemberOf',但我不确定API是否提供这种方法或其他方法。
非常感谢任何帮助。感谢。
答案 0 :(得分:1)
LDAP客户端应使用以下过滤器向服务器发送搜索请求:
'(isMemberOf=<the distinguished name of the entry>)'
以及相应的基础对象,过滤器和请求的属性。这假设服务器启用了isMemberOf
虚拟属性。
如果只有相对可分辨名称组件可用,则LDAP客户端必须搜索专有名称 - 在这种情况下,使用(<attribute-type>=<userid>>)
(例如,'(uid=user.1)'
)和1.1
请求属性将导致不返回任何属性。始终为每个匹配的条目返回可分辨名称。然后使用isMemberOf
构建过滤器并再次搜索。
答案 1 :(得分:1)
上面的搜索确实返回了该组的cn。 如果给你一个用户ID并且需要检查用户是否在一个众所周知的组中,那么过滤器“(isMemberOf =
如果您搜索(&amp;(uid =)(isMemberOf =属于该组的一部分。
亲切的问候,
朱利。