这些Java教程是为JDK 8编写的。本页中描述的示例和实践不利用后续版本中引入的改进,并可能使用不再可用的技术。
请参阅Java语言变更了解Java SE 9及其后续版本中更新的语言特性的概要。
请参阅JDK发布说明了解所有JDK版本的新功能、增强功能以及已删除或已弃用选项的信息。
您可以使用JNDI来执行命名操作,包括读操作和更新命名空间的操作。本课程描述了以下操作:
在对命名或目录服务执行任何操作之前,您需要获取一个初始上下文,即进入命名空间的起始点。这是因为所有的命名和目录服务方法都是相对于某个上下文进行的。要获取初始上下文,您必须按照以下步骤进行。
您可以通过创建一组环境属性(一个Hashtable)并将服务提供者类的名称添加到其中来指定初始上下文要使用的服务提供者。环境属性在JNDI教程中有详细描述。
如果您正在使用JDK中包含的LDAP服务提供者,则代码如下。
Hashtable<String, Object> env = new Hashtable<String, Object>(); env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
要指定JDK中的文件系统服务提供者,您需要编写如下代码。
Hashtable<String, Object> env = new Hashtable>String, Object>(); env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.fscontext.RefFSContextFactory");
您还可以使用系统属性来指定要使用的服务提供者。有关详细信息,请参阅JNDI教程。
不同目录的客户端可能需要各种用于与目录联系的信息。例如,您可能需要指定服务器在哪台机器上运行,以及用于将用户标识给目录的信息。此类信息通过环境属性传递给服务提供者。JNDI指定了一些通用的环境属性,服务提供者可以使用这些属性。您的服务提供者文档将提供有关这些属性所需信息的详细说明。
LDAP提供程序要求程序指定LDAP服务器的位置以及用户身份信息。为了提供这些信息,您需要编写以下代码。
env.put(Context.PROVIDER_URL, "ldap://ldap.wiz.com:389"); env.put(Context.SECURITY_PRINCIPAL, "joeuser"); env.put(Context.SECURITY_CREDENTIALS, "joepassword");
本教程使用JDK中的LDAP服务提供程序。示例假设在本地机器上已经设置了一个服务器,端口为389,根专有名称为"o=JNDITutorial",并且不需要身份验证来更新目录。它们包含以下用于设置环境的代码。
env.put(Context.PROVIDER_URL, "ldap://localhost:389/o=JNDITutorial");
如果您使用的目录设置不同,则需要相应地设置这些环境属性。您需要用该机器的名称替换"localhost"。您可以在任何公共目录服务器上或在不同机器上运行的自己的服务器上运行这些示例。您需要用该机器的名称替换"localhost",并将o=JNDITutorial替换为可用的命名上下文。
现在您已经准备好创建初始上下文了。为此,您将之前创建的环境属性传递给InitialContext构造函数:
Context ctx = new InitialContext(env);
现在您已经获得了对Context对象的引用,您可以开始访问命名服务。
要执行目录操作,您需要使用InitialDirContext之一。为此,使用其中一个构造函数:
DirContext ctx = new InitialDirContext(env);
此语句返回一个对于执行目录操作的DirContext对象的引用。