Java 教程是针对 JDK 8 编写的。本页面中描述的示例和实践不利用后续版本中引入的改进,并可能使用不再可用的技术。
请参阅Java 语言更改了解 Java SE 9 及后续版本中更新的语言特性的摘要。
请参阅JDK 发行说明了解有关所有 JDK 版本的新功能、增强功能和已删除或不推荐使用的选项的信息。
LDAP教程的剩余部分介绍了JNDI如何提供执行特定有趣的LDAP操作的能力。
您可以使用Context.rename()来重命名目录中的对象。在LDAP v2中,这对应于“修改RDN”操作,它在同一上下文中重命名一个条目(即重命名一个兄弟节点)。在LDAP v3中,这对应于“修改DN”操作,类似于“修改RDN”,但旧的和新的条目不需要在同一个上下文中。您可以使用Context.rename()来重命名叶条目或内部节点。在命名和目录操作课程中显示了一个重命名叶条目的示例。下面的代码
将一个内部节点从"ou=NewHires"重命名为"ou=OldHires":
ctx.rename("ou=NewHires", "ou=OldHires");
使用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");
在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");