LDAP方式鏈接AD獲取用戶信息

LDAP資料介紹能夠參考:http://wenku.baidu.com/view/262742f9f705cc17552709f9.htmlhtml

ldap訪問AD域的的錯誤通常會以下格式:java

Ldap load error: [LDAP: error code 49 - 80090308: LdapErr: DSID-0C090334, comment: AcceptSecurityContext error, data 525, vece]安全

其中紅字部分的意思以下(這些錯誤碼跟語言無關):服務器

525 - 用戶沒有找到架構

52e - 證書不正確dom

530 - not permitted to logon at this timethis

532 - 密碼期滿url

533 - 賬戶不可用.net

701 - 帳戶期滿code

773 - 用戶必須重設密碼

Java代碼 

 

  1. import java.util.Hashtable;  
  2. import javax.naming.Context;  
  3. import javax.naming.NamingEnumeration;  
  4. import javax.naming.NamingException;  
  5. import javax.naming.directory.Attribute;  
  6. import javax.naming.directory.Attributes;  
  7. import javax.naming.directory.SearchControls;  
  8. import javax.naming.directory.SearchResult;  
  9. import javax.naming.ldap.InitialLdapContext;  
  10. import javax.naming.ldap.LdapContext;  
  11.   
  12. public class LdapADHelper {  
  13.     public LdapADHelper() {  
  14.     }  
  15.     private String host,url,adminName,adminPassword;  
  16.     private LdapContext ctx = null;  
  17.     /** 
  18.      * 初始化ldap 
  19.      */  
  20.     public void initLdap(){  
  21.         //ad服務器  
  22.         this.host = "xxx.com"; // AD服務器  
  23.         this.url = new String("ldap://" + host );//默認端口爲80的能夠不用填寫,其餘端口須要填寫,如ldap://xxx.com:8080  
  24.         this.adminName = "admin@xxx.com";// 注意用戶名的寫法:domain\User 或  User@domain.com  
  25.         this.adminPassword = "admin";             
  26.         Hashtable HashEnv = new Hashtable();  
  27.         HashEnv.put(Context.SECURITY_AUTHENTICATION, "simple"); // LDAP訪問安全級別  
  28.         HashEnv.put(Context.SECURITY_PRINCIPAL, adminName); // AD User  
  29.         HashEnv.put(Context.SECURITY_CREDENTIALS, adminPassword); // AD Password  
  30.         HashEnv.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory"); // LDAP工廠類  
  31.         HashEnv.put(Context.PROVIDER_URL, url);  
  32.         try {  
  33.              ctx = new InitialLdapContext(HashEnv, null);  
  34.              System.out.println("初始化ldap成功!");  
  35.         } catch (NamingException e) {  
  36.             e.printStackTrace();  
  37.             System.err.println("Throw Exception : " + e);  
  38.         }  
  39.     }  
  40.     /** 
  41.      * 關閉ldap 
  42.      */  
  43.     public void closeLdap(){  
  44.         try {  
  45.             this.ctx.close();  
  46.         } catch (NamingException e) {  
  47.             // TODO Auto-generated catch block  
  48.             e.printStackTrace();  
  49.         }  
  50.     }  
  51.     /** 
  52.      *  
  53.      * @param type organizationalUnit:組織架構 group:用戶組 user|person:用戶 
  54.      * @param name 
  55.      * @return 
  56.      */  
  57.     public String GetADInfo(String type ,String filter ,String name) {  
  58.   
  59.         String userName = name; // 用戶名稱  
  60.         if (userName == null) {  
  61.             userName = "";  
  62.         }  
  63.         String company = "";  
  64.         String result = "";  
  65.         try {  
  66.             // 域節點  
  67.             String searchBase = "DC=xx,DC=xxx,DC=com";  
  68.             // LDAP搜索過濾器類  
  69.             //cn=*name*模糊查詢 cn=name 精確查詢  
  70. //          String searchFilter = "(objectClass="+type+")";  
  71.             String searchFilter = "(&(objectClass="+type+")("+filter+"=*" + name + "*))";  
  72.             // 建立搜索控制器  
  73.             SearchControls searchCtls = new SearchControls();   
  74.             //  設置搜索範圍  
  75.             searchCtls.setSearchScope(SearchControls.SUBTREE_SCOPE);   
  76. //          String returnedAtts[] = {  "memberOf" }; // 定製返回屬性  
  77. //      searchCtls.setReturningAttributes(returnedAtts); // 設置返回屬性集 不設置則返回全部屬性  
  78.             // 根據設置的域節點、過濾器類和搜索控制器搜索LDAP獲得結果  
  79.             NamingEnumeration answer = ctx.search(searchBase, searchFilter,searchCtls);// Search for objects using the filter  
  80.             // 初始化搜索結果數爲0  
  81.             int totalResults = 0;// Specify the attributes to return  
  82.             int rows = 0;  
  83.             while (answer.hasMoreElements()) {// 遍歷結果集  
  84.                 SearchResult sr = (SearchResult) answer.next();// 獲得符合搜索條件的DN  
  85.                 ++rows;  
  86.                 String dn = sr.getName();  
  87.                 System.out.println(dn);  
  88.                 Attributes Attrs = sr.getAttributes();// 獲得符合條件的屬性集  
  89.                 if (Attrs != null) {  
  90.                     try {  
  91.                         for (NamingEnumeration ne = Attrs.getAll(); ne.hasMore();) {  
  92.                             Attribute Attr = (Attribute) ne.next();// 獲得下一個屬性  
  93.                             System.out.println(" AttributeID=屬性名:"+ Attr.getID().toString());  
  94.                             // 讀取屬性值  
  95.                             for (NamingEnumeration e = Attr.getAll(); e.hasMore(); totalResults++) {  
  96.                                 company = e.next().toString();  
  97.                                 System.out.println("    AttributeValues=屬性值:"+ company);  
  98.                             }  
  99.                             System.out.println("    ---------------");  
  100.   
  101.                         }  
  102.                     } catch (NamingException e) {  
  103.                         System.err.println("Throw Exception : " + e);  
  104.                     }  
  105.                 }// if  
  106.             }// while  
  107.             System.out.println("************************************************");  
  108.             System.out.println("Number: " + totalResults);  
  109.             System.out.println("總共用戶數:"+rows);  
  110.         } catch (NamingException e) {  
  111.             e.printStackTrace();  
  112.             System.err.println("Throw Exception : " + e);  
  113.         }  
  114.         return result;  
  115.     }  
  116.   
  117.     public static void main(String args[]) {  
  118.         // 實例化  
  119.         LdapADHelper ad = new LdapADHelper();  
  120.         ad.initLdap();  
  121.     ad.GetADInfo("user","cn","李XX");//查找用戶  
  122.         ad.GetADInfo("organizationalUnit","ou","工程");//查找組織架構  
  123.     ad.GetADInfo("group","cn","福建xxx");//查找用戶組  
  124.           
  125.         ad.closeLdap();  
  126.     }  
  127. }  
相關文章
相關標籤/搜索