package com.zt.ad_oper;
import javax.naming.Context;
import javax.naming.Name;
import javax.naming.NamingEnumeration;
import javax.naming.NamingException;
import javax.naming.directory.*;
import javax.naming.ldap.InitialLdapContext;
import javax.naming.ldap.LdapContext;
import javax.naming.ldap.LdapName;
import java.util.*;
/**
* @author zt 獲取AD域用戶相關(guān)信息
*/
public class LdapOperUtil {
private static LdapOperUtil ldapOperUtil;
private String root = "OU=xxxx,DC=xxxxxxxxxx,DC=xx"; // LDAP的根節(jié)點的DC
// private LdapContext ldapContext = null;
private DirContext ldapContext = null;
private LdapOperUtil() {
getConnect();
}
public static LdapOperUtil getNewInstance() {
if (ldapOperUtil == null) {
ldapOperUtil = new LdapOperUtil();
}
return ldapOperUtil;
}
/**
* 連接AD域
*
* @return
*/
private void getConnect() {
Hashtable<String, String> env = new Hashtable<>();
env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
String ldapURL = "ldap://" + "192.168.1.xxx" + ":" + 389;
env.put(Context.PROVIDER_URL, ldapURL);
env.put(Context.SECURITY_AUTHENTICATION, "simple");
env.put(Context.SECURITY_PRINCIPAL, "username");
env.put(Context.SECURITY_CREDENTIALS, "pwd"); //密碼
try {
this.ldapContext = new InitialDirContext(env);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 遍歷AD域
*
* @throws NamingException
*/
private void getUserInfo() throws NamingException {
SearchControls searchCtls = new SearchControls();
searchCtls.setSearchScope(SearchControls.SUBTREE_SCOPE);
// 注意OU和DC的先后順序
NamingEnumeration results = this.ldapContext.search("OU=4#608,DC=cipherchina,DC=com", "objectClass=User", searchCtls);
while (results.hasMoreElements()) {
SearchResult sr = (SearchResult) results.next();
Attributes attributes = sr.getAttributes();
NamingEnumeration values = attributes.getAll();
while (values.hasMore()) {
Attribute attr = (Attribute) values.next();
Enumeration vals = attr.getAll();
while (vals.hasMoreElements()) {
Object o = vals.nextElement();
System.out.println(attr.getID() + "--------------" + o.toString());
}
}
}
}
/**
* 添加一個用戶
* @param newUserName
*/
private void add(String newUserName) {
try {
BasicAttributes attrs = new BasicAttributes();
BasicAttribute objclassSet = new BasicAttribute("objectClass");
objclassSet.add("person");
objclassSet.add("top");
objclassSet.add("user");
attrs.put(objclassSet);
attrs.put("ou", newUserName);
this.ldapContext.createSubcontext("CN=" + newUserName + ",ou=java," + root, attrs);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 刪除一個用戶
* @param dn
*/
private void delete(String dn) {
try {
this.ldapContext.destroySubcontext(dn);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 重命名一個用戶
* @param oldDN
* @param newDN
* @return
*/
public boolean renameEntry(String oldDN, String newDN) {
try {
this.ldapContext.rename(oldDN, newDN);
return true;
} catch (NamingException ne) {
ne.printStackTrace();
return false;
}
}
public static void main(String[] args) throws NamingException {
LdapOperUtil ldap = LdapOperUtil.getNewInstance();
try {
// ldap.getUserInfo();
// 刪除一個用戶
// ldap.delete("CN=test,OU=java,"+ldap.root);
// 添加一個用戶
// ldap.add("test");
// 重命名一個用戶
// ldap.renameEntry("cn=test1,"+ldap.root,"cn=xx,ou=java,"+ldap.root);
} catch (Exception e) {
e.printStackTrace();
}
// ldap.getUserInfo();
}
}
java操作AD域增刪改查
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
- 文/潘曉璐 我一進(jìn)店門姨夹,熙熙樓的掌柜王于貴愁眉苦臉地迎上來纤垂,“玉大人矾策,你說我怎么就攤上這事∏吐伲” “怎么了贾虽?”我有些...
- 文/不壞的土叔 我叫張陵,是天一觀的道長吼鱼。 經(jīng)常有香客問我蓬豁,道長,這世上最難降的妖魔是什么菇肃? 我笑而不...
- 正文 為了忘掉前任地粪,我火速辦了婚禮,結(jié)果婚禮上琐谤,老公的妹妹穿的比我還像新娘蟆技。我一直安慰自己,他們只是感情好斗忌,可當(dāng)我...
- 文/花漫 我一把揭開白布质礼。 她就那樣靜靜地躺著,像睡著了一般织阳。 火紅的嫁衣襯著肌膚如雪眶蕉。 梳的紋絲不亂的頭發(fā)上,一...
- 文/蒼蘭香墨 我猛地睜開眼圣拄,長吁一口氣:“原來是場噩夢啊……” “哼嘴秸!你這毒婦竟也來了庇谆?” 一聲冷哼從身側(cè)響起岳掐,我...
- 正文 年R本政府宣布,位于F島的核電站衫仑,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏文狱。R本人自食惡果不足惜粥鞋,卻給世界環(huán)境...
- 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望瞄崇。 院中可真熱鬧呻粹,春花似錦壕曼、人聲如沸。這莊子的主人今日做“春日...
- 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至筹燕,卻和暖如春轧飞,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背撒踪。 一陣腳步聲響...
推薦閱讀更多精彩內(nèi)容
- 結(jié)合上文的執(zhí)行結(jié)果: 如果想要顯示字段名凌埂,通過元數(shù)據(jù)顯示 添加數(shù)據(jù)換一種寫法:
- hadoop-HDFS除了在linux上以shell的方式進(jìn)行操作外驱显,還可以利用java來操作诗芜,接下來我們就來實現(xiàn)...
- 準(zhǔn)備 1.通過npm命令安裝mongodb2.安裝mongodb數(shù)據(jù)庫瞳抓,這里不詳細(xì)介紹了,網(wǎng)上一堆 CRUD操作 ...
- 姓名:胡巧 公司:鄱湖牧業(yè)有限公司 【日精進(jìn)第9天】 一伏恐、【學(xué)~勤學(xué)】 ①日常課誦 《領(lǐng)導(dǎo)者的資質(zhì)》大綱1遍,共計...