# LDAP 操作如何映射到 JNDI API

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

LDAP 定义了一组操作或请求（参见 [RFC 2251](http://www.ietf.org/rfc/rfc2251.txt) ）。在 JNDI 中，这些映射到 [`DirContext`](https://docs.oracle.com/javase/8/docs/api/javax/naming/directory/DirContext.html)和 [`LdapContext`](https://docs.oracle.com/javase/8/docs/api/javax/naming/ldap/LdapContext.html)接口（ [`的子接口）上的操作上下文`](https://docs.oracle.com/javase/8/docs/api/javax/naming/Context.html) ）。例如，当调用者调用 `DirContext` 方法时，LDAP 服务提供者通过将 LDAP 请求发送到 LDAP 服务器来实现该方法。

下表显示了 LDAP 中的操作如何与 JNDI 方法相对应。

| LDAP 操作 | 相应的 JNDI 方法 |
| --- | --- |
| 捆绑 | 在 JNDI 中创建与 LDAP 服务器的初始连接的相应方式是创建 [`InitialDirContext`](https://docs.oracle.com/javase/8/docs/api/javax/naming/directory/InitialDirContext.html)。当应用程序创建初始上下文时，它通过环境属性提供客户端身份验证信息。要更改现有上下文的身份验证信息，请使用 [`Context.addToEnvironment（）`](https://docs.oracle.com/javase/8/docs/api/javax/naming/Context.html#addToEnvironment-java.lang.String-java.lang.Object-) 和 [`Context.removeFromEnvironment（）`](https://docs.oracle.com/javase/8/docs/api/javax/naming/Context.html#removeFromEnvironment-java.lang.String-) 。 |
| 解除绑定 | [`Context.close（）`](https://docs.oracle.com/javase/8/docs/api/javax/naming/Context.html#close) 用于释放上下文使用的资源。它与 LDAP“unbind”操作的不同之处在于，在给定的服务提供者实现中，资源可以在上下文之间共享，因此如果这些资源与另一个上下文共享，则关闭一个上下文将不会释放所有资源。如果您的意图是释放所有资源，请务必关闭所有上下文。 |
| 搜索 | JNDI 中的相应方法是 [`DirContext.search（）`](https://docs.oracle.com/javase/8/docs/api/javax/naming/directory/DirContext.html#search-java.lang.String-java.lang.String-javax.naming.directory.SearchControls-) 的重载，它接受搜索过滤器（ [RFC 2254](http://www.ietf.org/rfc/rfc2254.txt) ）。参见[滤波器](../ops/filter.html)示例。 |
| 修改 | JNDI 中的相应方法是 [`DirContext.modifyAttributes（）`](https://docs.oracle.com/javase/8/docs/api/javax/naming/directory/DirContext.html#modifyAttributes-java.lang.String-javax.naming.directory.ModificationItem:A-) 的重载，其接受 [`DirContext.ModificationItem`](https://docs.oracle.com/javase/8/docs/api/javax/naming/directory/ModificationItem.html)的数组。有关示例，请参见[修改属性](../ops/modattrs.html)部分。 |
| 加 | JNDI 中的相应方法是 [`DirContext.bind（）`](https://docs.oracle.com/javase/8/docs/api/javax/naming/directory/DirContext.html#bind-java.lang.String-java.lang.Object-javax.naming.directory.Attributes-) 和 [`DirContext.createSubcontext（）`](https://docs.oracle.com/javase/8/docs/api/javax/naming/directory/DirContext.html#createSubcontext-java.lang.String-javax.naming.directory.Attributes-) 。您可以使用任一方法添加新的 LDAP 条目。使用 `bind（）`，您不仅可以为新条目指定一组属性，还可以指定要与属性一起添加的 Java 对象。有关示例，请参阅[添加，用属性](../ops/bindattr.html)部分替换绑定。 |
| 删除 | JNDI 中的相应方法是 [`Context.unbind（）`](https://docs.oracle.com/javase/8/docs/api/javax/naming/Context.html#unbind-java.lang.String-) 和 [`Context.destroySubcontext（）`](https://docs.oracle.com/javase/8/docs/api/javax/naming/Context.html#destroySubcontext-java.lang.String-) 。您可以使用任一方法删除 LDAP 条目。 |
| 修改 DN / RDN | JNDI 中的相应方法是 [`Context.rename（）`](https://docs.oracle.com/javase/8/docs/api/javax/naming/Context.html#rename-java.lang.String-java.lang.String-) 。有关详细信息，请参阅[重命名对象](../ldap/rename.html)部分。 |
| 相比 | JNDI 中的相应操作是适当约束的 [`DirContext.search（）`](https://docs.oracle.com/javase/8/docs/api/javax/naming/directory/DirContext.html#search-java.lang.String-javax.naming.directory.Attributes-java.lang.String:A-) 。有关示例，请参见 [LDAP 比较](../ldap/compare.html)部分。 |
| 放弃 | 关闭上下文时，将放弃所有未完成的请求。同样，当您关闭 [`NamingEnumeration`](https://docs.oracle.com/javase/8/docs/api/javax/naming/NamingEnumeration.html)时，将放弃相应的 LDAP“搜索”请求。 |
| 延长操作 | JNDI 中的相应方法是 [`LdapContext.extendedOperation（）`](https://docs.oracle.com/javase/8/docs/api/javax/naming/ldap/LdapContext.html#extendedOperation-javax.naming.ldap.ExtendedRequest-) 。有关详细信息，请参阅 [JNDI 教程](https://docs.oracle.com/javase/jndi/tutorial/ldap/ext/index.html)。 |