Spring LDAP错误更改可分辨名称

时间:2017-01-27 14:39:44

标签: java active-directory ldap spring-ldap

我无法找到使用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的正确方法吗?错误消息根本不是很有用。

1 个答案:

答案 0 :(得分:0)

显然,您无法使用修改操作更改distinguishedName属性。使用Spring LDAP执行此操作的正确方法是使用LdapTemplate.rename方法。您可以将oldDnnewDn作为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);