文档

Java™ 教程
隐藏目录
JNDI作为LDAP API
路径: Java命名和目录接口
课程: 高级LDAP用户主题

JNDI作为LDAP API

JNDI和LDAP模型都定义了一个层次化的命名空间,在其中命名对象。命名空间中的每个对象都可以具有用于搜索对象的属性。在这个高级别上,这两个模型是相似的,因此JNDI很好地映射到了LDAP。

模型

你可以将LDAP条目视为JNDI的DirContext。每个LDAP条目包含一个名称和一组属性,以及一个可选的子条目集合。例如,LDAP条目"o=JNDITutorial"的属性可能是"objectclass""o",并且它可能具有"ou=Groups""ou=People"这两个子条目。

在JNDI中,LDAP条目"o=JNDITutorial"被表示为一个具有名称"o=JNDITutorial"的上下文,该上下文有两个子上下文,分别命名为"ou=Groups""ou=People"。LDAP条目的属性由Attributes接口表示,而单个属性由Attribute接口表示。

LDAP和JNDI的表示形式

有关如何通过JNDI访问LDAP操作的详细信息,请参阅本教程的下一部分

名称

由于联邦性的结果,您在向JNDI的上下文方法中提供的名称可以跨多个命名空间。这些称为复合名称。在使用JNDI访问LDAP服务时,您应该知道正斜杠字符("/")在字符串名称中对JNDI具有特殊含义。如果LDAP条目的名称包含此字符,则需要进行转义(使用反斜杠字符("\"))。例如,具有名称"cn=O/R"的LDAP条目必须以字符串"cn=O\\/R"的形式呈现给JNDI上下文方法。有关名称的更多信息,请查看JNDI教程LdapNameRdn类简化了LDAP名称的创建和操作。

LDAP名称在协议中使用时始终是完全限定的名称,它们标识从LDAP命名空间的根(由服务器定义)开始的条目。以下是一些完全限定LDAP名称的示例。

cn=Ted Geisel, ou=Marketing, o=某个公司, c=gb
cn=Vinnie Ryan, ou=People, o=JNDITutorial

然而,在JNDI中,名称始终是相对的;也就是说,您总是相对于上下文命名对象。例如,您可以将条目"cn=Vinnie Ryan"相对于名为"ou=People, o=JNDITutorial"的上下文进行命名。或者您可以将条目"cn=Vinnie Ryan, ou=People"相对于名为"o=JNDITutorial"的上下文进行命名。或者,您可以创建一个指向LDAP服务器命名空间根的初始上下文,并将条目命名为"cn=Vinnie Ryan, ou=People, o=JNDITutorial"

在JNDI中,您还可以使用LDAP URL来命名LDAP条目。请参阅JNDI教程中的LDAP URL讨论。


上一页:LDAP v3
下一页:LDAP 操作如何映射到 JNDI API