// Standard anonymous search
import java.util.Hashtable;
import java.util.Enumeration;import javax.naming.*;
import javax.naming.directory.*;public class JNDISearch {  // Initial context implementation
  public static String INITCTX = "com.sun.jndi.ldap.LdapCtxFactory";
  public static String MY_HOST = "ldap://localhost:389";
  public static String MY_SEARCHBASE = "o=Airius.com";
  public static String MY_FILTER = "(sn=Carter)";  public static void main(String args[]) {
    try {      // Hashtable for environmental information
      Hashtable env = new Hashtable();      // Specify which class to use for our JNDI provider
      env.put(Context.INITIAL_CONTEXT_FACTORY, INITCTX);      // Specify host and port to use for directory service
      env.put(Context.PROVIDER_URL, MY_HOST);      // Get a reference to a directory context
      DirContext ctx = new InitialDirContext(env);      // Specify the scope of the search
      SearchControls constraints = new SearchControls();
      constraints.setSearchScope(SearchControls.SUBTREE_SCOPE);      // Perform the actual search
      // We give it a searchbase, a filter and a the constraints
      // containing the scope of the search
      NamingEnumeration results = ctx.search(MY_SEARCHBASE, 
                                             MY_FILTER, constraints);      // Now step through the search results
      while (results != null && results.hasMore()) {
        SearchResult sr = (SearchResult) results.next();        String dn = sr.getName();
        System.out.println("Distinguished Name is " + dn);        Attributes attrs = sr.getAttributes();        for (NamingEnumeration ne = attrs.getAll(); 
             ne.hasMoreElements(); ) {
          Attribute attr = (Attribute) ne.next();
          String attrID = attr.getID();          System.out.println(attrID + ":");
          for (Enumeration vals = attr.getAll(); 
               vals.hasMoreElements(); ) {
            System.out.println("\t" + vals.nextElement());
          } 
        } 
        System.out.println("\n");
      } 
    } catch (Exception e) {
      e.printStackTrace();
      System.exit(1);
    } 
  } 
}

解决方案 »

  1.   

    这是访问iPlanet Directory Server的方法。
    DN(distinguish name)一定要写对!
      

  2.   

    先谢谢斑竹,我也有这段代码!不过有以下几处不明,还请斑竹指教!
    我们总工要用microsoft AD活动目录,比如我们的域名是appdomain.edu.com.cn,下面有一个组是appDev,appDev里面有一个用户hdc,我如何查找组的全部信息或个人信息?
      

  3.   

    一般来说,Directory是靠DN来作为区别一条记录的唯一标识。DN的形式一般是这样
    sn=buick555, ou=Java Dev, o=development, com=buick.com等
    你可以看出DN是从右到左范围减小的。所以,要先给出一个范围o=Airius.com(上程序)一般是一个根
    可以给出一个过滤器sn=Carter
    这样就可以查找了。希望再查阅AD的相关文档