天天看點

一個完整的ldap操作的例子

以下是對ldap中進行連接配接,人員的增删改查的過程。希望對初學者有一定的幫助。

package net.risesoft.ldap;

import java.util.Enumeration;

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 = "admin";

  String password = "1";

  String root = "o=com"; // root

  Hashtable env = new Hashtable();

  env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");

  env.put(Context.PROVIDER_URL, "ldap://localhost:389/" + root);

  env.put(Context.SECURITY_AUTHENTICATION, "simple");

  env.put(Context.SECURITY_PRINCIPAL, "cn=" + account + "," + root);

  env.put(Context.SECURITY_CREDENTIALS, password);

  DirContext ctx = null;

  try {

   // 連結ldap

   ctx = new InitialDirContext(env);

   System.out.println("ldap認證成功");

   // 3.添加節點

   String newUserName = "user2";

   BasicAttributes attrsbu = new BasicAttributes();

   BasicAttribute objclassSet = new BasicAttribute("objectclass");

   objclassSet.add("person");

   objclassSet.add("top");

   objclassSet.add("organizationalPerson");

   objclassSet.add("inetOrgPerson");

   attrsbu.put(objclassSet);

   attrsbu.put("sn",   newUserName);

   attrsbu.put("uid",   newUserName);

   ctx.createSubcontext("cn=" + newUserName, attrsbu);

   // 5.修改節點

   account = "user2";

   String newDisplayName = "newDisplayName";

   ModificationItem modificationItem[] = new ModificationItem[1];

   modificationItem[0] = new ModificationItem(DirContext.REPLACE_ATTRIBUTE, new BasicAttribute("displayName", newDisplayName));

   ctx.modifyAttributes("cn=" + account, modificationItem);

   // 查詢節點

   SearchControls constraints = new SearchControls();

   constraints.setSearchScope(SearchControls.SUBTREE_SCOPE);

   // constraints.setSearchScope(SearchControls.ONELEVEL_SCOPE);

   NamingEnumeration en = ctx.search("", "cn=user2", 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 ae = attrs.getAll(); ae.hasMoreElements();) {

       Attribute attr = (Attribute) ae.next();

       String attrId = attr.getID();

       for (Enumeration 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 = "user2";

   ctx.destroySubcontext("cn=" + account);

  } 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);

 }

}