日期:2014-05-17 浏览次数:21126 次
由于业务需要,近期做了个LDAP迁移WIN AD的方案,到网上查了很多资料,发现利用java无法往AD里写入用户密码以及自定义的字段。经过咨询microsoft的工程师,得到如下结论:
1、如果要往AD写用户密码,只能通过.net或者微软提供的接口。
2、要扩展AD的自定义属性,或者元素,通过注册Schmmgmt.dll,管理AD的架构。(注册方法:开始-->运行-->cmd-->确定-->regsvr32?Schmmgmt.dll.dll)
?
具体操作方法如下:
?
一、首先定义自定义的属性(前提是已经注册好了Schmmgmt.dll.dll):
?
开始-->运行-->mmc-->确定 ? 此时会弹出一个控制台,继续如下操作 ? 文件-->添加管理单元-->Active Directory 架构-->添加-->确定 ? 此时,展开MMC控制台最左边的的?Active Directory 架构树 右键点击属性-->新建-->属性-->继续 (以下是你自己需要的属性内容) ? 最后一步操作,展开类,将你新建的属性关联到类。 |
?
二、通过程序连接LDAP(我用的是JLDAP,当然,你可以用别的方式,网上资料很多,可以查查),伪代码如下:
?
import com.novell.ldap.LDAPConnection; import com.novell.ldap.LDAPSearchResults; import com.novell.ldap.LDAPEntry; ? ? ? ? ? ? ? String LDAP_Ip = "10.10.159.59"; ? ? ? ??int LDAP_port = 389; LDAPConnection con = new LDAPConnection(); con.connect(LDAP_Ip?,?LDAP_port); con.bind(LDAPConnection.LDAP_V3, "cn=directory manager","11111111"); LDAPSearchResults rs = con.search("ou=People,dc=test,dc=com", LDAPConnection.SCOPE_SUB, "objectClass=*", null, false); ? ? 别忘了操作完了断开连接释放资源。 |
?
三、将查询到的数据写入AD(伪代码如下):
?
LDAPConnection con = new LDAPConnection(); con.connect("10.10.159.86", 389); //连接AD时要注意,它的用户名为 登陆账户@域名 con.bind(LDAPConnection.LDAP_V3, "Administrator@test.com","pa$$word"); ? ...获取LDAP的数据略 ? //以下是存储方法 ? LDAPAttributeSet attributeSet = new LDAPAttributeSet(); attributeSet.add(new LDAPAttribute("objectclass", new String("user"))); attributeSet.add(new LDAPAttribute("objectclass", new String("top"))); attributeSet.add(new LDAPAttribute("objectclass", new String("person"))); attributeSet.add(new LDAPAttribute("objectclass", new String("organizationalPerson"))); attributeSet.add(new LDAPAttribute("userPrincipalName", "test"+"@test.com")); attributeSet.add(new LDAPAttribute("samAccountName", "tesst")); //attributeSet.add(new LDAPAttribute("datasource", "testSource")); ?? //attributeSet.add(new LDAPAttribute("userpassword", new String("newpassword"))); ?? LDAPEntry entry = new LDAPEntry("cn=test,CN=Users,DC=test,DC=com",attributeSet);
|