本教程是针对JDK 8编写的。本页面中描述的示例和实践不利用后续版本中引入的改进,并可能使用已不再可用的技术。
有关Java SE 9及后续版本中更新的语言功能的摘要,请参阅Java语言变更。
有关所有JDK版本的新功能、增强功能以及已删除或弃用选项的信息,请参阅JDK发布说明。
管理引荐控制(RFC 3296)在执行LDAP操作时,使得引荐和其他特殊对象能够像普通对象一样进行操作。换句话说,管理引荐控制告诉LDAP服务器返回引荐条目作为普通条目,而不是返回“引荐”错误响应或继续引用。JDK 5.0中的新类可以让您在LDAP请求中发送管理引荐控制:
javax.naming.ldap.ManageReferralControl
JDK中的LDAP服务提供程序会自动随任何请求一起发送此控制。您还可以通过将Context.REFERRAL环境属性设置为“ignore”来显式启用它。有关引荐处理的更多信息,请参阅JNDI教程的“JNDI中的引荐”部分。
以下是发送管理引荐控制的示例:
// 创建初始上下文 LdapContext ctx = (LdapContext) new InitialDirContext(env); ctx.setRequestControl(new Control[] new ManageReferralControl()); // 为执行子树搜索设置控制 SearchControls ctls = new SearchControls(); ctls.setSearchScope(SearchControls.SUBTREE_SCOPE); // 执行搜索 NamingEnumeration answer = ctx.search("", "(objectclass=*)", ctls); // 打印答案 while (answer.hasMore()) { System.out.println(">>>" + ((SearchResult)answer.next()).getName()); } // 完成后关闭上下文 ctx.close();
完整示例可以在这里
找到。
注意 1:上述示例需要您使用配置文件refserver.ldif
设置第二个服务器。该服务器必须支持LDAP v3和RFC 3296。如果服务器不以这种方式支持引荐,那么示例将无法正常工作。配置文件包含指向您设置的原始服务器的引荐。它假设原始服务器位于本地机器上的389端口。如果您在其他机器或端口上设置了服务器,则需要编辑refserver.ldif文件中的“ref”条目,并将“localhost:389”替换为适当的设置。第二个服务器需要在本地机器上的489端口上设置。如果您将第二个服务器设置在其他机器或端口上,则需要相应地调整初始上下文的Context.PROVIDER_URL环境属性的设置。
设置目录服务器通常由目录或系统管理员执行。有关更多信息,请参阅软件设置教程。
注意 2:Windows Active Directory:由于Active Directory不支持管理引荐控制,因此本课程中的所有示例都无法在Active Directory上运行。