- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我编写了一个程序,用于读取 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,我可以看到所有所需的属性都存在,但根本没有返回。
我尝试替换 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/
你能比较一下属性吗 我想禁用文本框“txtName”。有两种方式 使用javascript,txtName.disabled = true 使用 ASP.NET, 哪种方法更好,为什么? 最佳答案 我
Count 属性 返回一个集合或 Dictionary 对象包含的项目数。只读。 object.Count object 可以是“应用于”列表中列出的任何集合或对
CompareMode 属性 设置并返回在 Dictionary 对象中比较字符串关键字的比较模式。 object.CompareMode[ = compare] 参数
Column 属性 只读属性,返回 TextStream 文件中当前字符位置的列号。 object.Column object 通常是 TextStream 对象的名称。
AvailableSpace 属性 返回指定的驱动器或网络共享对于用户的可用空间大小。 object.AvailableSpace object 应为 Drive 
Attributes 属性 设置或返回文件或文件夹的属性。可读写或只读(与属性有关)。 object.Attributes [= newattributes] 参数 object
AtEndOfStream 属性 如果文件指针位于 TextStream 文件末,则返回 True;否则如果不为只读则返回 False。 object.A
AtEndOfLine 属性 TextStream 文件中,如果文件指针指向行末标记,就返回 True;否则如果不是只读则返回 False。 object.AtEn
RootFolder 属性 返回一个 Folder 对象,表示指定驱动器的根文件夹。只读。 object.RootFolder object 应为 Dr
Path 属性 返回指定文件、文件夹或驱动器的路径。 object.Path object 应为 File、Folder 或 Drive 对象的名称。 说明 对于驱动器,路径不包含根目录。
ParentFolder 属性 返回指定文件或文件夹的父文件夹。只读。 object.ParentFolder object 应为 File 或 Folder 对象的名称。 说明 以下代码
Name 属性 设置或返回指定的文件或文件夹的名称。可读写。 object.Name [= newname] 参数 object 必选项。应为 File 或&
Line 属性 只读属性,返回 TextStream 文件中的当前行号。 object.Line object 通常是 TextStream 对象的名称。 说明 文件刚
Key 属性 在 Dictionary 对象中设置 key。 object.Key(key) = newkey 参数 object 必选项。通常是 Dictionary 
Item 属性 设置或返回 Dictionary 对象中指定的 key 对应的 item,或返回集合中基于指定的 key 的&
IsRootFolder 属性 如果指定的文件夹是根文件夹,返回 True;否则返回 False。 object.IsRootFolder object 应为&n
IsReady 属性 如果指定的驱动器就绪,返回 True;否则返回 False。 object.IsReady object 应为 Drive&nbs
FreeSpace 属性 返回指定的驱动器或网络共享对于用户的可用空间大小。只读。 object.FreeSpace object 应为 Drive 对象的名称。
FileSystem 属性 返回指定的驱动器使用的文件系统的类型。 object.FileSystem object 应为 Drive 对象的名称。 说明 可
Files 属性 返回由指定文件夹中所有 File 对象(包括隐藏文件和系统文件)组成的 Files 集合。 object.Files object&n
我是一名优秀的程序员,十分优秀!