package com.abc.xyz;
import java.util.Hashtable;
import javax.naming.Context;
import javax.naming.NamingEnumeration;
import javax.naming.NamingException;
import javax.naming.directory.Attribute;
import javax.naming.directory.Attributes;
import javax.naming.directory.BasicAttribute;
import javax.naming.directory.BasicAttributes;
import javax.naming.directory.DirContext;
import javax.naming.directory.InitialDirContext;
import javax.naming.directory.ModificationItem;
import javax.naming.directory.SearchControls;
import javax.naming.directory.SearchResult;
public class LDAPtest {
public static void main(String[] args) {
String account = "administrator";
String password = "abc";
String baseName = ",cn=users,dc=xyz,dc=abc,dc=com";
Hashtable<String, String> env = new Hashtable<String, String>();
env.put(Context.INITIAL_CONTEXT_FACTORY,
"com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.PROVIDER_URL, "ldap://10.221.204.XXX:389");
env.put(Context.SECURITY_AUTHENTICATION, "simple");
env.put(Context.SECURITY_PRINCIPAL, "cn=" + account +baseName);
env.put(Context.SECURITY_CREDENTIALS, password);
DirContext ctx = null;
try {
// 链接ldap
ctx = new InitialDirContext(env);
System.out.println("ldap认证成功");
// 3.添加节点
String newUserName = "test";
BasicAttributes attrsbu = new BasicAttributes();
BasicAttribute objclassSet = new BasicAttribute("objectclass");
objclassSet.add("top");
objclassSet.add("person");
objclassSet.add("organizationalPerson");//可以添加相应的属性
objclassSet.add("user");
attrsbu.put(objclassSet);
attrsbu.put("sn", newUserName);
attrsbu.put("displayName", newUserName);
ctx.createSubcontext("cn=" + newUserName+baseName, attrsbu);
System.out.println("添加成功");
// 5.修改节点
account = "test";
String newDisplayName = "testchange";
ModificationItem modificationItem[] = new ModificationItem[1];
modificationItem[0] = new ModificationItem(DirContext.REPLACE_ATTRIBUTE, new BasicAttribute("displayName", newDisplayName));
ctx.modifyAttributes("cn=" + account+baseName, modificationItem);
System.out.println("修改成功");
// 查询节点
SearchControls constraints = new SearchControls();
constraints.setSearchScope(SearchControls.SUBTREE_SCOPE);
// constraints.setSearchScope(SearchControls.ONELEVEL_SCOPE);
//String searchFilter = "objectClass=User"; // specify the LDAP search filter
String searchFilter = "cn=test234";
String searchBase = "dc=xyz,dc=abc,dc=com"; //Specify the Base for the search搜索域节点
NamingEnumeration<SearchResult> en = ctx.search(searchBase,searchFilter, constraints); // 查询所有用户
while (en != null && en.hasMoreElements()) {
Object obj = en.nextElement();
if (obj instanceof SearchResult) {
SearchResult si = (SearchResult) obj;
System.out.println("name: " + si.getName());
Attributes attrs = si.getAttributes();
if (attrs == null) {
System.out.println("No attributes");
} else {
for (NamingEnumeration<? extends Attribute> ae = attrs.getAll(); ae.hasMoreElements();) {
Attribute attr = (Attribute) ae.next();
String attrId = attr.getID();
for (NamingEnumeration<?> vals = attr.getAll(); vals.hasMoreElements();) {
System.out.print(attrId + ": ");
Object o = vals.nextElement();
if (o instanceof byte[])
System.out.println();// new String((byte[])o)
else
System.out.println(o);
}
}
}
} else {
System.out.println(obj);
}
System.out.println();
}
// 4.删除节点
account = "test";
ctx.destroySubcontext("cn=" + account+baseName);
System.out.println("删除成功");
} catch (javax.naming.AuthenticationException e) {
System.out.println("认证失败");
} catch (Exception e) {
System.out.println("认证出错:");
e.printStackTrace();
}
if (ctx != null) {
try {
ctx.close();
} catch (NamingException e) {
// ignore
}
}
System.exit(0);
}
}
微软操作微软AD(LDAP)---链接,查询,添加,删除
最新推荐文章于 2024-01-24 08:37:48 发布