更多 LDAP 操作
LDAP 类的其余部分介绍了 JNDI 如何提供执行某些有趣的 LDAP 操作的能力。
Renaming Objects
您使用Context.rename()重命名目录中的对象。在LDAP v2中,这对应于“ modify RDN”操作,该操作重命名了同一上下文中的条目(即,重命名同级)。在LDAP v3中,这与“修改 DN”操作相对应,类似于“修改 RDN”,只是新旧条目不必位于同一上下文中。您可以使用Context\.rename\(\)
重命名叶子条目或内部节点。 命名和目录操作类中显示的示例重命名了叶子条目。以下code将内部节点从"ou=NewHires"
重命名为"ou=OldHires"
:
ctx.rename("ou=NewHires", "ou=OldHires");
Note:
Oracle 目录服务器 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"
命名的上下文。以下是an example演示了这一点。如果try在 LDAP v2 服务器上运行此示例,则将获得InvalidNameException,因为版本 2 不支持此功能。
ctx.rename("cn=C. User, ou=NewHires", "cn=C. User, ou=People");
Note:
Oracle 目录服务器 v5.2不支持使用不同的父节点重命名。如果使用该服务器运行此示例,则将获得OperationNotSupportedException(指示“协议错误”)。
保留旧名称属性
在 LDAP 中,重命名条目时,可以选择保留条 Object 旧 RDN 作为更新条 Object 属性。例如,如果将条目"cn=C\. User"
重命名为"cn=Claude User"
,则可以指定是否要将旧 RDN "cn=C\. User"
保留为属性。
若要指定在使用Context\.rename\(\)
时是否要保留旧名称属性,请使用"java\.naming\.ldap\.deleteRDN"
环境属性。如果此属性的值为"true"
(默认值),则将删除旧的 RDN。如果其值为"false"
,则将旧的 RDN 保留为已更新条 Object 属性。完整的示例是here。
// Set the property to keep RDN
env.put("java.naming.ldap.deleteRDN", "false");
// Create the initial context
DirContext ctx = new InitialDirContext(env);
// Perform the rename
ctx.rename("cn=C. User, ou=NewHires", "cn=Claude User,ou=NewHires");