日期:2014-05-17  浏览次数:21156 次

Sun LDAP 5.2 迁移 Windows 2008 Active Directory(AD)方案

由于业务需要,近期做了个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);