LDAP-轻型目录访问协议,我不知道你会用什么目录服务器.但你最好去SUN的网站上下载JNDI Tutorial ,这个教材会对你有很大帮助.在学习的时候,最好还是用一用目录服务器,这样会加深理解.

解决方案 »

  1.   

    1.在win2000或者redhat7.2以上使用一个LDAP服务器IPlanet 4&5( 从www.iplanet.com下载)
    2.安装包含标准JNDI软件开发包(JDK1.3以上..)
    3.开发步骤..包括LADP中的一些标准操作:
    1)连接到LDAP服务器
    2)访问LADP服务器(很多企业将其和邮件服务器整和作为验证)
    3)搜索服务
    4)添加新记录项
    5)修改记录项
    6)删除记录项
    7)从LDAP服务器断开
    举例如下:从LADP服务器(IPlanet)操作一个Person类
      

  2.   

    添加操作:
    // Standard anonymous search
    import java.util.Hashtable;
    import java.util.Enumeration;import javax.naming.*;
    import javax.naming.directory.*;public class JNDIAdd {  // Initial context implementation
      public static String INITCTX = "com.sun.jndi.ldap.LdapCtxFactory";
      public static String MY_HOST = "ldap://localhost:389";
      public static String MGR_DN = "uid=kvaughan, ou=People, dc=siroe, dc=com";
      public static String MGR_PW = "bribery";
      public static String MY_SEARCHBASE = "dc=siroe,dc=com";  //public static String MY_BASE = "ou=people,o=airius.com";
      //public static String MY_DN = "uid=mewilcox";  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);
    env.put(Context.SECURITY_AUTHENTICATION,"simple");
            env.put(Context.SECURITY_PRINCIPAL,MGR_DN);
            env.put(Context.SECURITY_CREDENTIALS,MGR_PW);      // Get a reference to a directory context
          DirContext ctx = new InitialDirContext(env);
          Person p = new Person("mewilcox","Mark","Wilcox","ou=Accounting","[email protected]");
          
          ctx.bind("uid=mewilcox,ou=People,dc=siroe,dc=com", p);    } catch (Exception e) {
          e.printStackTrace();
          System.exit(1);
        } 
      } 
    }
    删除操作:
    import java.util.Hashtable;
    import java.util.Enumeration;
    import javax.naming.*;
    import javax.naming.directory.*;public class JNDIDel {   // initial context implementation 
       public static String INITCTX = "com.sun.jndi.ldap.LdapCtxFactory";   public static String MY_HOST = "ldap://localhost:389";  public static String MGR_DN = "uid=kvaughan, ou=People, dc=siroe, dc=com";
      public static String MGR_PW = "bribery";   public static String MY_SEARCHBASE = "dc=siroe,dc=com";   public static String MY_ENTRY = "uid=mewilcox, ou=People, dc=siroe, dc=com";   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);         env.put(Context.PROVIDER_URL,MY_HOST);
             env.put(Context.SECURITY_AUTHENTICATION,"simple");
             env.put(Context.SECURITY_PRINCIPAL,MGR_DN);
             env.put(Context.SECURITY_CREDENTIALS,MGR_PW);         //Get a reference to a directory context
             DirContext ctx = new InitialDirContext(env);         ctx.destroySubcontext(MY_ENTRY);
          } catch(Exception e) {
             e.printStackTrace();
             System.exit(1);
          }
       }
    }
      

  3.   

    搜索操作:
    // 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 = "dc=siroe,dc=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);
        } 
      } 
    }