上次写的程序存在很大的问题,就是子目录用户不能登录。所以我们要先通过用户cn获取到用户dn,然后再验证登录。

程序需要使用到jldap.jar  这个自己网上搜索下载。

 

获取DN的程序

 

 
  
  1. package ldap; 
  2.  
  3. import com.novell.ldap.LDAPConnection; 
  4. import com.novell.ldap.LDAPEntry; 
  5. import com.novell.ldap.LDAPException; 
  6. import com.novell.ldap.LDAPSearchResults; 
  7.  
  8. public class getDN { 
  9.     public String getDN(String userName) { 
  10.         String ldaphost = "192.168.XX.XX"
  11.         int ldapPort = LDAPConnection.DEFAULT_PORT; 
  12.         String searchBase = "dc=XX,dc=com"
  13.         String searchFilter = "objectClass=*"
  14.         int searchScope = LDAPConnection.SCOPE_SUB; 
  15.         LDAPConnection lc = new LDAPConnection(); 
  16.         String dn = null
  17.         try { 
  18.             lc.connect(ldaphost, ldapPort); 
  19.             LDAPSearchResults searchResults = lc.search(searchBase, 
  20.                     searchScope, searchFilter, null, false); 
  21.  
  22.             while (searchResults.hasMore()) { 
  23.                 LDAPEntry nextEntry = null
  24.                 nextEntry = searchResults.next(); 
  25.                 String str = nextEntry.getDN(); 
  26.                 String str1 = "cn=" + userName + ""; 
  27.                 if (str.contains(str1)) { 
  28.                     dn = str
  29.                     return dn; 
  30.                 } 
  31.             } 
  32.         } catch (LDAPException t) { 
  33.             dn=null
  34.         } 
  35.         return dn; 
  36.     } 
  37.     /* public static void main(String []args){ 
  38.             getDN conn = new getDN(); 
  39.             System.out.println(conn.getDN("test1")); 
  40.         } 
  41.         */ 

 

 

验证登录

 

 
  
  1. public boolean login(String name,String password) { 
  2.         boolean result = true
  3.          getDN getdn = new getDN(); 
  4.         String ldapdn=getdn.getDN(name); 
  5.         DirContext ctx = null
  6.         Hashtable<String, String> env = new Hashtable<String, String>(); 
  7.         env.put(Context.INITIAL_CONTEXT_FACTORY, 
  8.                 "com.sun.jndi.ldap.LdapCtxFactory"); 
  9.         env.put(Context.PROVIDER_URL, host);                    // LDAP host 
  10.         env.put(Context.SECURITY_AUTHENTICATION, "simple"); // 简单模式进行连接 
  11.         env.put(Context.SECURITY_PRINCIPAL,ldapdn);             // 用户名 
  12.         env.put(Context.SECURITY_CREDENTIALS, password);    // 密码传进去 
  13.         try { 
  14.             ctx = new InitialDirContext(env); 
  15.          
  16.         } catch (Exception e) { 
  17.             result = false
  18.         }