0

两天前我刚得到这个要求,我第一次使用 LDAP(openDS)。事实上,我的研发时间非常有限。我已经尽可能多地阅读了 openDS 的开发人员指南和 SDK Api。

基本上我有一个非常简单的要求。我将获得一个“用户 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 是否提供了这种方法或者是别的什么。

任何帮助深表感谢。谢谢。

4

2 回答 2

1

LDAP 客户端应使用以下过滤器向服务器发送搜索请求:

'(isMemberOf=<the distinguished name of the entry>)'

以及适当的基础对象、过滤器和请求的属性。这假定服务器isMemberOf启用了虚拟属性。

如果只有相对专有名称组件可用,则 LDAP 客户端必须搜索专有名称 - 在这种情况下使用(<attribute-type>=<userid>>)(例如,'(uid=user.1)')和1.1请求属性,这将导致不返回任何属性。始终为每个匹配的条目返回可分辨名称。然后构造过滤器isMemberOf并再次搜索。

也可以看看

于 2012-06-03T16:02:54.207 回答
1

上面的搜索确实返回了 Group 的 cn。如果给你一个用户 ID 并且需要检查用户是否在一个众所周知的组中,那么过滤器 "(isMemberOf=

如果您搜索 (&(uid=)(isMemberOf= 这是该组的一部分。

亲切的问候,

卢多维奇。

于 2012-06-04T07:27:54.193 回答