文档

Java™ 教程
隐藏目录
更多 LDAP 操作
路径: Java 命名和目录接口
课程: LDAP 用户的高级主题

更多 LDAP 操作

LDAP教程的剩余部分介绍了JNDI如何提供执行特定有趣的LDAP操作的能力。

重命名对象

您可以使用Context.rename()来重命名目录中的对象。在LDAP v2中,这对应于“修改RDN”操作,它在同一上下文中重命名一个条目(即重命名一个兄弟节点)。在LDAP v3中,这对应于“修改DN”操作,类似于“修改RDN”,但旧的和新的条目不需要在同一个上下文中。您可以使用Context.rename()来重命名叶条目或内部节点。在命名和目录操作课程中显示了一个重命名叶条目的示例。下面的代码将一个内部节点从"ou=NewHires"重命名为"ou=OldHires"

ctx.rename("ou=NewHires", "ou=OldHires");

注意: Oracle Directory Server v5.2 不支持重命名内部节点。如果您运行此示例,则会收到ContextNotEmptyException

重命名到DIT的不同部分

使用LDAP v3,您可以将条目重命名为DIT的不同部分。要使用Context.rename()进行此操作,您必须使用作为新旧条目的共同祖先的上下文。例如,要将"cn=C. User, ou=NewHires, o=JNDITutorial"重命名为"cn=C. User, ou=People, o=JNDITutorial",您必须使用由"o=JNDITutorial"指定的上下文。以下是演示此操作的示例。如果您尝试对LDAP v2服务器运行此示例,则会收到InvalidNameException,因为版本2不支持此功能。

ctx.rename("cn=C. User, ou=NewHires", "cn=C. User, ou=People");

注意: Oracle Directory Server v5.2 不支持将条目重命名为不同的父节点。如果你使用该服务器运行此示例,则会收到一个 OperationNotSupportedException(表示"协议错误")。

保留旧的名称属性

在LDAP中,当你重命名一个条目时,可以选择将条目的旧RDN保留为更新后条目的属性。例如,如果你将条目 "cn=C. User" 重命名为 "cn=Claude User",你可以指定是否要将旧RDN "cn=C. User" 保留为属性。

当使用 Context.rename() 方法时,可以使用 "java.naming.ldap.deleteRDN" 环境属性来指定是否要保留旧的名称属性。如果该属性的值为 "true"(默认值),则旧RDN将被删除。如果其值为 "false",则旧RDN将被保留为更新后条目的属性。完整的示例代码在 这里

// 设置保留RDN的属性
env.put("java.naming.ldap.deleteRDN", "false");

// 创建初始上下文
DirContext ctx = new InitialDirContext(env);

// 执行重命名操作
ctx.rename("cn=C. User, ou=NewHires", "cn=Claude User,ou=NewHires");

上一页: SSL和自定义套接字
下一页: LDAP比较