类:命名和目录操作
您可以使用 JNDI 执行命名操作,包括读取操作和用于更新名称空间的操作。本课描述了以下操作:
Configuration
在对命名或目录服务执行任何操作之前,您需要获取一个* initial context *-命名空间的起点。这是因为有关命名和目录服务的所有方法都是相对于某些上下文执行的。要获得初始上下文,您必须遵循以下步骤。
-
选择您要访问的相应服务的服务提供商。
-
指定初始上下文需要的任何配置。
-
调用InitialContext构造函数。
步骤 1:为初始上下文选择服务提供商
您可以通过创建一组环境属性(Hashtable
)并向其添加服务提供者类的名称来指定用于初始上下文的服务提供者。 JNDI Tutorial中详细描述了环境属性。
如果您使用的是 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 Tutorial以获得详细信息。
步骤 2:提供初始上下文所需的信息
不同目录的 Client 端可能需要各种信息来联系目录。例如,您可能需要指定服务器在哪台计算机上运行以及需要哪些信息来识别目录的用户。此类信息通过环境属性传递给服务提供商。 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
。
步骤 3:创建初始上下文
现在您可以创建初始上下文了。为此,将先前创建的环境属性传递给InitialContext constructor:
Context ctx = new InitialContext(env);
现在您已经有了对Context对象的引用,就可以开始访问命名服务了。
要执行目录操作,您需要使用InitialDirContext。为此,请使用其constructors之一:
DirContext ctx = new InitialDirContext(env);
该语句返回对用于执行目录操作的DirContext对象的引用。