# JNDI 作为 LDAP API

> 原文： [https://docs.oracle.com/javase/tutorial/jndi/ldap/jndi.html](https://docs.oracle.com/javase/tutorial/jndi/ldap/jndi.html)

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

## 楷模

您可以将 LDAP 条目视为 JNDI [`DirContext` ](https://docs.oracle.com/javase/8/docs/api/javax/naming/directory/DirContext.html)。每个 LDAP 条目都包含一个名称和一组属性，以及一组可选的子条目。例如，LDAP 条目`“o = JNDITutorial”`可能具有`“objectclass”`和`“o”`的属性，并且它可能具有其子项`“ou =群组”`和`“ou = People”`。

在 JNDI 中，LDAP 条目`“o = JNDITutorial”`表示为具有名称`“o = JNDITutorial”`的上下文，其具有两个子上下文，名称为：`“ou =群组“`和`”ou = People“`。 LDAP 条目的属性由 [`属性`](https://docs.oracle.com/javase/8/docs/api/javax/naming/directory/Attributes.html) 接口表示，而各个属性由 [`属性`](https://docs.oracle.com/javase/8/docs/api/javax/naming/directory/Attribute.html) 接口表示。

<center>![A representation of LDAP and JNDI](img/293d0bf5482a248c7903ede6fe43f71f.jpg)</center>

有关如何通过 JNDI 访问 LDAP 操作的详细信息，请参阅本课程的下一部分[。](operations.html)

## 名称

作为联合的结果，您提供给 JNDI 的上下文方法的名称可以跨越多个名称空间。这些称为复合名称。使用 JNDI 访问 LDAP 服务时，您应该知道字符串名称中的正斜杠字符（“/”）对 JNDI 具有特殊含义。如果 LDAP 条目的名称包含此字符，则需要将其转义（使用反斜杠字符（“\”））。例如，名称为`“cn = O / R”`的 LDAP 条目必须作为字符串`“cn = O \\ / R”`呈现给 JNDI 上下文方法。有关名称的更多信息，请查看 [JNDI 教程](https://docs.oracle.com/javase/jndi/tutorial/beyond/names/index.html)。 [LdapName](https://docs.oracle.com/javase/8/docs/api/javax/naming/ldap/LdapName.html) 和 [Rdn](https://docs.oracle.com/javase/8/docs/api/javax/naming/ldap/Rdn.html) 类简化了 LDAP 名称的创建和操作。

协议中使用的 LDAP 名称始终是完全限定名称，用于标识从 LDAP 名称空间的根目录开始的条目（由服务器定义）。以下是完全限定的 LDAP 名称的一些示例。

```
cn=Ted Geisel, ou=Marketing, o=Some Corporation, 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 教程](https://docs.oracle.com/javase/jndi/tutorial/ldap/misc/url.html)中的 LDAP URL 讨论。