我无法找到使用Spring LDAP在组织单位之间移动Active Directory中某人的正确方法。
我正在使用Spring LDAP 2.0.4.RELEASE。我尝试了四种不同的方法来设置我试图移动的person对象上的distinguishedName
,并且每次都会出现LDAP错误。
1)将distinguishedName
设为String
,包括dc
部分。
final Name currentDn = LdapNameBuilder.newInstance("CN=Some Person,OU=Old,OU=Domain Users").build();
final String newDn = "CN=Some Person,OU=New,OU=Domain Users,dc=my,dc=domain";
final Attribute attributeChange = new BasicAttribute("distinguishedName", newDn);
final ModificationItem modificationItem = new ModificationItem(DirContext.REPLACE_ATTRIBUTE, attributeChange);
ldapTemplate.modifyAttributes(currentDn, new ModificationItem[]{modificationItem});
这给了我以下错误:
javax.naming.directory.InvalidAttributeValueException:[LDAP:错误代码19 - 000020B1:AtrErr:DSID-030F052C,#1: 0:000020B1:DSID-030F052C,问题1005(CONSTRAINT_ATT_TYPE),数据0,Att 31(distinguishedName) ]。剩余名称'CN =某人,OU =旧,OU =域用户'
2)将distinguishedName
设置为String
,将设置为 dc
部分。
final Name currentDn = LdapNameBuilder.newInstance("CN=Some Person,OU=Old,OU=Domain Users").build();
//the line below is the only line changed from (1)
final String newDn = "CN=Some Person,OU=New,OU=Domain Users";
final Attribute attributeChange = new BasicAttribute("distinguishedName", newDn);
final ModificationItem modificationItem = new ModificationItem(DirContext.REPLACE_ATTRIBUTE, attributeChange);
ldapTemplate.modifyAttributes(currentDn, new ModificationItem[]{modificationItem});
这给了我一个不同的错误:
org.springframework.ldap.UncategorizedLdapException:在LDAP处理期间发生了未分类的异常;嵌套异常是javax.naming.NamingException:[LDAP:错误代码80 - 00002089:UpdErr:DSID-031B0D38,问题5012(DIR_ERROR),数据5 ]。剩余名称'CN =某人,OU =旧,OU =域用户'
3)将distinguishedName
设为LdapName
,包括dc
部分。
final Name currentDn = LdapNameBuilder.newInstance("CN=Some Person,OU=Old,OU=Domain Users").build();
final Name newDn = LdapNameBuilder.newInstance("CN=Some Person,OU=New,OU=Domain Users,dc=my,dc=domain").build();
final Attribute attributeChange = new BasicAttribute("distinguishedName", newDn);
final ModificationItem modificationItem = new ModificationItem(DirContext.REPLACE_ATTRIBUTE, attributeChange);
ldapTemplate.modifyAttributes(currentDn, new ModificationItem[]{modificationItem});
这给我的错误与(1)相同。
4)将distinguishedName
设为LdapName
,不 dc
部分。
final Name currentDn = LdapNameBuilder.newInstance("CN=Some Person,OU=Old,OU=Domain Users").build();
final Name newDn = LdapNameBuilder.newInstance("CN=Some Person,OU=New,OU=Domain Users").build();
final Attribute attributeChange = new BasicAttribute("distinguishedName", newDn);
final ModificationItem modificationItem = new ModificationItem(DirContext.REPLACE_ATTRIBUTE, attributeChange);
ldapTemplate.modifyAttributes(currentDn, new ModificationItem[]{modificationItem});
这也给出了与(1)相同的错误。
我错过了什么?这不是使用Spring LDAP更改Active Directory人员对象上的distinguishedName
的正确方法吗?错误消息根本不是很有用。
答案 0 :(得分:0)
显然,您无法使用修改操作更改distinguishedName
属性。使用Spring LDAP执行此操作的正确方法是使用LdapTemplate.rename
方法。您可以将oldDn
和newDn
作为String
个对象或Name
个对象传递。
final Name oldDn = LdapNameBuilder.newInstance("CN=Some Person,OU=Old,OU=Domain Users").build();
final Name newDn = LdapNameBuilder.newInstance("CN=Some Person,OU=New,OU=Domain Users").build();
ldapTemplate.rename(oldDn, newDn);