目標:使用者只需要會使用List,Map 數據結構,將對LDAP的操作進行封裝
類:主要有三個類
1 Env類 包含LDAP的連接信息
2 LdapConnectionFactory類 ldap連接工廠,提供初始化及獲取ldap連接的方法
3 LdapOperUtils ldap的處理工具類,提供了各種操作ldap的方法。
如何使用封裝JNDI操作LDAP服務器
的工具類
下面是一個例子
測試類的功能,向Windows Active Directory 增加一個域用戶 lwf2_count,並激活該帳戶
public class TestOper {
public static void main(String args[]) throws BaseException,
NamingException, UnsupportedEncodingException {
// 連接Active Directory 信息
Env env = new Env();
env.factory = "com.sun.jndi.ldap.LdapCtxFactory";
env.url = "ldap://10.110.179.175:389";
env.adminUID = "cn=administrator,cn=users,DC=securitytest,DC=boco";
env.adminPWD = "Ba88736612";
DirContext dirContext = LdapConnectionFactory.getDirContext(env);
// 增加一個Active Directory 用戶需要的屬性
List list1 = new ArrayList();
Map attMap = new HashMap();
list1.add("top");
list1.add("person");
list1.add("organizationalPerson");
list1.add("user");
attMap.put("objectclass", list1);
attMap.put("cn","lwf2_count"); // Active Directory 的name
ttMap.put("sn","liao"); // Active Directory 的 姓
attMap.put("givenName","wufeng"); // Active Directory 的 名
attMap.put("displayName","liaowufeng"); // Active Directory 的 顯示名
attMap.put("userPrincipalName","[email protected]"); // Active Directory 的 用戶登錄名
attMap.put("saMaccountName","lwf2_name"); // Active Directory 的 用戶登錄名 (widnows 2000 以前版本)
String newPassWord = "bA123456";
attMap.put("userPassword",newPassWord); // 用戶密碼
int UF_ACCOUNTDISABLE = 0x0002;
int UF_PASSWD_NOTREQD = 0x0020;
int UF_PASSWD_CANT_CHANGE = 0x0040;
int UF_NORMAL_ACCOUNT = 0x0200;
int UF_DONT_EXPIRE_PASSWD = 0x10000; // 激活帳號
int UF_PASSWord_EXPIRED = 0x800000;
// 激活帳號
attMap.put("userAccountControl", Integer.toString(UF_DONT_EXPIRE_PASSWD));
LdapOperUtils.addContext(dirContext,"CN=lwf2_count,CN=Users,DC=securitytest,DC=boco", attMap);
// 關閉dirContext
LdapConnectionFactory.closeDirContext(dirContext);
}
}
好了,就寫到這了,LdapOperUtils這個類提供了LDAP操作大多數要使用的方法。所有方法在實際工作中都使用過。
對於各位有什麼更好的想法,或需要的操作,沒有提供到,請與我聯系,共同討論。