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

标签 java ldap opends

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

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

最佳答案

LDAP 客户端应使用以下过滤器将搜索请求传输到服务器:

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

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

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

另请参阅

关于java - 检查(使用 openDS SDK)成员属于 openDS LDAP 中的哪个组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10869094/

相关文章:

java - 如何读取 blob 的内容并将其写入 GAE 数据存储 (Java)

java - 如何增加最终的整数变量?

ldap - 如何在 Open ds 上创建 base dn

linux - 当上下文名称中有 '#' 符号时,ldap_explode_dn() 中的问题

ruby - Ldap gem 在 Rails 中抛出与服务器异常的连接

c# - 使用 System.DirectoryService 连接到 OpenDS

java - 尝试传递 customAdapter 时出现空指针异常?

java - 错误找不到符号 - Java 类和方法

c++ - Windows 服务上基于 SSL 的 LDAP

java - 面临空指针异常