Search Results

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

Name

每个SearchResult都包含满足搜索过滤条件的 LDAP 条 Object 名称。您可以使用getName()获得条 Object 名称。此方法将 LDAP 条目* relative composite name返回到 target context *。目标上下文是name参数解析到的上下文。用 LDAP 的话来说,目标上下文是搜索的“基础对象”。这是一个例子。

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

在此示例中,目标上下文是由"ou=NewHires"命名的上下文。 answerSearchResult s 中的名称是相对于"ou=NewHires"的。例如,如果getName\(\)返回"cn=J\. Duke",则其相对于ctx的名称将为"cn=J\. Duke, ou=NewHires"

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

这还不是全部。如果搜索涉及引用(请参见JNDI Tutorial)或取消引用别名(请参见JNDI Tutorial),则对应的SearchResult的名称将与目标上下文无关。相反,它们将是直接引用条 ObjectURL。要确定getName\(\)返回的名称是相对名称还是绝对名称,请使用isRelative()。如果此方法返回true,则该名称相对于目标上下文;如果返回false,则名称为 URL。

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

如果您需要获取条 Object 完整 DN,则可以使用NameClassPair.getNameInNamespace()

Object

如果执行搜索请求返回条 Object 对象,则_7 调用了__,则SearchResult将包含代表该条 Object 对象。要检索此对象,请调用getObject()。如果java\.io\.SerializableReferenceableReference对象先前已绑定到该 LDAP 名称,则使用条目中的属性来重建该对象(请参见JNDI Tutorial中的示例)。否则,将使用条目中的属性来创建一个DirContext实例,该实例代表 LDAP 条目。无论哪种情况,LDAP 提供程序都会在对象上调用DirectoryManager.getObjectInstance()并返回结果。

Class Name

如果执行搜索请求返回条 Object 对象,则从返回的对象派生类名。如果搜索请求的属性包括对 LDAP 条 Object"javaClassName"属性的检索,则类名就是该属性的值。否则,类名称为"javax\.naming\.directory\.DirContext"。类名称是从getClassName()获得的。

Attributes

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

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

Response Controls

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