搜索结果

原文: https://docs.oracle.com/javase/tutorial/jndi/ldap/result.html

当您使用 DirContext接口中的搜索方法时,您将返回 NamingEnumerationNamingEnumeration中的每个项目都是 SearchResult,其中包含以下信息:

每个SearchResult都包含满足搜索过滤器的 LDAP 条目的名称。您可以使用 getName() 获取条目的名称。该方法将[条目相对复合名称 返回到目标上下文。目标上下文是名称参数解析的上下文。在 LDAP 用语中,目标上下文是搜索的基础对象。这是一个例子。

  1. NamingEnumeration answer = ctx.search("ou=NewHires",
  2. "(&(mySpecialKey={0}) (cn=*{1}))", // Filter expression
  3. new Object[]{key, name}, // Filter arguments
  4. null); // Default search controls

此示例中的目标上下文是由“ou = NewHires”命名的。 答案SearchResult中的名称与“ou = NewHires”有关。例如,如果getName()返回“cn = J.Duke”,则其相对于ctx的名称将为“cn = J. Duke,ou = NewHires“

如果您使用 SearchControls.SUBTREE_SCOPESearchControls.OBJECT_SCOPE执行搜索并且目标上下文本身满足搜索过滤器,则返回的名称将是“”(空名称),因为这是相对于目标上下文的名称。

这不是全部。如果搜索涉及推荐(参见 JNDI 教程)或解除引用别名(参见 JNDI 教程),那么相应的SearchResult将具有不是的名称相对于目标上下文。相反,它们将是直接引用该条目的 URL。要确定getName()返回的名称是相对还是绝对,请使用 isRelative() 。如果此方法返回true ,则该名称相对于目标上下文;如果它返回false ,则该名称是 URL。

如果名称是 URL 并且您需要使用该 URL,则可以将其传递给理解 URL 的初始上下文(请参阅 JNDI 教程)。

如果你需要获得条目的完整 DN,你可以使用 NameClassPair.getNameInNamespace()

如果进行搜索请求返回条目的对象SearchControls.setReturningObjFlag()true )调用,则SearchResult将包含表示该条目的对象。要检索此对象,请调用 getObject() 。如果java.io.Serializable可参考参考 对象先前已绑定到该 LDAP 名称,然后条目中的属性用于重建该对象(参见 JNDI 教程中的示例)。否则,条目中的属性用于创建表示 LDAP 条目的DirContext实例。在任何一种情况下,LDAP 供应器都会在对象上调用 DirectoryManager.getObjectInstance() 并返回结果。

如果进行搜索以请求返回条目的对象,则从返回的对象派生类名。如果搜索请求的属性包括检索 LDAP 条目的“javaClassName”属性,则类名称是该属性的值。否则,类名是“javax.naming.directory.DirContext”。类名从 getClassName() 获得。

执行搜索时,可以通过向 搜索() 方法之一提供参数或使用 设置搜索控件来选择返回属性 SearchControls.setReturningAttributes() 。如果未明确指定任何属性,则返回所有 LDAP 条目的属性。要指定不返回任何属性,必须传递一个空数组( new String [0] )。

要检索 LDAP 条目的属性,请在SearchResult上调用 getAttributes()

响应控制

有关如何检索搜索结果的响应控件的详细信息,请参阅 JNDI 教程的控件和扩展课程。