Spring LdapContextSource不同的域控制器

时间:2016-11-04 10:37:59

标签: java spring active-directory ldap

我配置了多个域控制器,并希望修改所有域中用户的用户属性。

我的配置如下:

<bean id="writeLdapContextSource"
    class="org.springframework.ldap.core.support.LdapContextSource">
    <property name="url" value="ldap://123.12.123.3:389" />
    <property name="base" value="" />
    <property name="userDn" value="domainx\userabc" />
    <property name="password" value="secret124" />
    <property name="pooled" value="false"/>
    <property name="referral" value="follow"/>
</bean>

我可以成功修改本地域内的用户。这没问题。

但是,如果我尝试修改其他域中的用户,则会收到错误消息。

注意: ldap服务用户&#34; domainx \ userabc&#34;拥有在所有域中进行修改的正确授权。

示例:

1。)修改另一个域中用户的属性

引起:javax.naming.OperationNotSupportedException:[LDAP:错误代码53 - 00000057:LdapErr:DSID-0C04214C,注释:属性转换操作出错,数据0,v1db1

2.)更改配置以使用端口3268而不是389

引起:javax.naming.OperationNotSupportedException:[LDAP:错误代码53 - 00002035:LdapErr:DSID-0C090B45,注释:不允许通过GC端口操作,数据0,v1db1

注意:我能够修改本地域中的用户属性。所以我的修改代码是正确的。

段:

DirContextOperations context = writeLdapTemplate.lookupContext(ldapUser.getDistinguishedName());
context.addAttributeValue(attributeName, attributeValue);
writeLdapTemplate.modifyAttributes(context);

这适用于本地域用户。

任何人都知道如何修改其他域中的用户?

我还使用LDAP浏览器检查了用户,他能够看到所有域......

1 个答案:

答案 0 :(得分:0)

全局目录(端口3268)提供只读&#34;快照&#34;森林中的所有条目。要对条目执行写入操作,您需要在端口389上绑定到其各自的域。

您可以使用全局编录查询所有可用域,然后为每个域动态创建LdapTemplates并使用它们来执行修改。