gpt4 book ai didi

java - Unboundid 不返回请求的 LDAP 属性。为什么?

转载 作者:太空宇宙 更新时间:2023-11-04 07:03:29 26 4
gpt4 key购买 nike

我编写了一个程序,用于读取 Web 服务、检索用户数据,然后将该数据推送到 ActiveDirectory,从而更新用户的头衔、地址、电话号码等。

问题是,当我使用 Unboundid Connection 类执行搜索时,不会返回请求的属性。下面是搜索代码:

SearchResult result = connection.search( properties.getProperty("ldap.search.baseDN"), 
SearchScope.SUB, "(cn=" + userId + ")",
"personalTitle", "department", "company", "manager", "telephoneNumber",
"streetAddress", "I", "st", "postalCode", "c", "pager", "mobile",
"fax", "cn");

以上代码定位到所需用户,cn属性按预期返回,但其他属性均无法返回。如果我使用 JXplorer 使用相同的连接凭据连接到 AD,我可以看到所有所需的属性都存在,但根本没有返回。

enter image description here

我尝试替换 SearchRequest.ALL_OPERATIONAL_ATTRIBUTES、SearchRequest.ALL_USER_ATTRIBUTES 和 SearchRequest.REQUEST_ATTRS_DEFAULT,而不是明确列出字段,但没有成功。

我还查看了从“connection.getSchema()”返回的“Schema”对象,并且可以看到 individualTitle 应该存在:

connection.getSchema().getAttributeType("personalTitle")

上面的代码返回:

1.2.840.113556.1.2.615 名称“personalTitle”语法“1.3.6.1.4.1.1466.115.121.1.15”单值

所以这可能是用户权限问题?有谁经历过这种情况并知道如何解决吗?

谢谢,迈克

最佳答案

LDAP 搜索结果条目仅包含实际具有值的属性,因此您从 UnboundID LDAP SDK 看到的行为是适当且正确的。即使您明确请求某一特定属性,该属性也只有在具有一个或多个值时才会包含在条目中。

我认为您对 JXplorer 感到困惑,因为它正在读取架构来根据其对象类确定条目中可能包含哪些属性,并向您显示它们,以便您可以在编辑器中设置这些属性的值。但这并不意味着服务器返回的条目实际上包含有关这些属性的任何信息。

要验证这一点,您可以使用 LDAP SDK 提供的 ldap-debugger 工具来查看实际发生的 LDAP 通信。只需运行如下命令:

 tools/ldap-debugger --hostname {directory-server-address} \
--port {directory-server-port} --listenPort {listen-port}

这将创建一个非常简单的 LDAP 代理服务器,用于解码通过它的所有请求和响应。要使用它,只需将 JXplorer 指向指定的监听端口即可。您将看到,当 JXplorer 检索条目时,服务器返回的条目将仅包含实际具有值的属性。

如果您想弄清楚可以包含在给定条目中的所有可能属性,请使用 LDAPConnection.getSchema 方法检索服务器架构,然后使用 Schema.getObjectClass 检索目标条目中的每个对象类,最后使用 ObjectClassDefinition.getRequiredAttributes 和 ObjectClassDefinition.getOptionalAttributes 方法来查看具有该对象类的条目中必须和可以使用哪些属性类型。

关于java - Unboundid 不返回请求的 LDAP 属性。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21768166/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com