搜索结果
原文: https://docs.oracle.com/javase/tutorial/jndi/ldap/result.html
当您使用 DirContext
接口中的搜索方法时,您将返回 NamingEnumeration
。 NamingEnumeration
中的每个项目都是 SearchResult
,其中包含以下信息:
每个SearchResult
都包含满足搜索过滤器的 LDAP 条目的名称。您可以使用 getName()
获取条目的名称。该方法将[条目相对的 复合名称
返回到目标上下文。目标上下文是名称
参数解析的上下文。在 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”
命名的。 答案
中SearchResult
中的名称与“ou = NewHires”
有关。例如,如果getName()
返回“cn = J.Duke”
,则其相对于ctx
的名称将为“cn = J. Duke,ou = NewHires“
。
如果您使用 SearchControls.SUBTREE_SCOPE
或 SearchControls.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 教程的控件和扩展课程。