要检查(使用openDS SDK),成员属于openDS LDAP中的哪个组

时间:2012-06-03 09:06:54

标签: java ldap opends

我两天前刚收到这个要求,我第一次使用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是否提供这种方法或其他方法。

非常感谢任何帮助。感谢。

2 个答案:

答案 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 =属于该组的一部分。

亲切的问候,

朱利。