微软操作微软AD(LDAP)---链接,查询,添加,删除
来源:互联网 发布:sql insert into 多条 编辑:程序博客网 时间:2024/06/04 18:11
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 {// 链接ldapctx = 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 filterString 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)elseSystem.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);}}