AD域和LDAP協議


隨着我們的習大大上台后,國家在網絡信息安全方面就有了很明顯的改變!所以現在好多做網絡信息安全產品的公司和需要網絡信息安全的公司都會提到用AD域服務器來驗證,這里就簡單的研究了一下!

先簡單的講講AD域和LdAP目錄訪問協議:AD(active directory)活動目錄,動態的建立整個域模式網絡中的對象的數據庫或索引,協議為LDAP,安裝了AD的服務器稱為DC域控制器,存儲整個域的對象的信息並周期性更新!其中的對象分為三大類——資源(如印表機)、服務(如電子郵件)、和人物(即帳戶或用戶,以及組)。 

 

LDAP是一個用來發布目錄信息到許多不同資源的協議。通常它都作為一個集中的地址被使用,不過根據組織者的需要,它可以做得更加強大。
LDAP其實是一個電話簿,類似於我們所使用諸如NIS(Network Information Service)、DNS (Domain Name Service)等網絡目錄,也類似於你在花園中所看到的樹木。

不少LDAP開發人員喜歡把LDAP與關系數據庫相比,認為是另一種的存貯方式,然后在讀性能上進行比較。實際上,這種對比的基礎是錯誤的。LDAP和關系數據庫是兩種不同層次的概念,后者是存貯方式(同一層次如網絡數據庫,對象數據庫),前者是存貯模式和訪問協議。LDAP是一個比關系數據庫抽象層次更高的存貯概念,與關系數據庫的查詢語言SQL屬同一級別。LDAP最基本的形式是一個連接數據庫的標准方式。該數據庫為讀查詢作了優化。因此它可以很快地得到查詢結果,不過在其它方面,例如更新,就慢得多。AD域和LdAP目錄訪問協議就介紹到這里!下面來看看簡單的demo吧!

 

 

[java]  view plain copy 在CODE上查看代碼片 派生到我的代碼片
 
  1. /** 
  2.  * @Description:  
  3.  * 
  4.  * @Title: LdAPTest.java 
  5.  * @Package com.joyce.itext.main 
  6.  * @Copyright: Copyright (c) 2014 
  7.  * 
  8.  * @author Comsys-LZP 
  9.  * @date 2014-8-7 上午10:20:22 
  10.  * @version V2.0 
  11.  */  
  12. package com.joyce.itext.main;  
  13.   
  14. import java.util.Properties;  
  15.   
  16. import javax.naming.Context;  
  17. import javax.naming.NamingEnumeration;  
  18. import javax.naming.NamingException;  
  19. import javax.naming.directory.SearchControls;  
  20. import javax.naming.directory.SearchResult;  
  21. import javax.naming.ldap.InitialLdapContext;  
  22. import javax.naming.ldap.LdapContext;  
  23.   
  24. /** 
  25.  * @Description:拉取AD域賬戶 
  26.  *  
  27.  * @ClassName: LdAPTest 
  28.  * @Copyright: Copyright (c) 2014 
  29.  *  
  30.  * @author Comsys-LZP 
  31.  * @date 2014-8-7 上午10:20:22 
  32.  * @version V2.0 
  33.  */  
  34. public class LdAPTest {  
  35.     public static void main(String[] args) {  
  36.         Properties env = new Properties();  
  37.         String adminName = "administrator@2003.com";//username@domain  
  38.         String adminPassword = "admin";//password  
  39.         String ldapURL = "LDAP://10.10.2.153:389";//ip:port  
  40.         env.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.ldap.LdapCtxFactory");  
  41.         env.put(Context.SECURITY_AUTHENTICATION, "simple");//"none","simple","strong"  
  42.         env.put(Context.SECURITY_PRINCIPAL, adminName);  
  43.         env.put(Context.SECURITY_CREDENTIALS, adminPassword);  
  44.         env.put(Context.PROVIDER_URL, ldapURL);  
  45.         try {  
  46.             LdapContext ctx = new InitialLdapContext(env, null);  
  47.             SearchControls searchCtls = new SearchControls();  
  48.             searchCtls.setSearchScope(SearchControls.SUBTREE_SCOPE);  
  49.             String searchFilter = "(&(objectCategory=person)(objectClass=user)(name=*))";  
  50.             String searchBase = "DC=2003,DC=com";  
  51.             String returnedAtts[] = {"memberOf"};  
  52.             searchCtls.setReturningAttributes(returnedAtts);  
  53.             NamingEnumeration<SearchResult> answer = ctx.search(searchBase, searchFilter,searchCtls);  
  54.             while (answer.hasMoreElements()) {  
  55.                 SearchResult sr = (SearchResult) answer.next();  
  56.                 System.out.println("<<<::[" + sr.getName()+"]::>>>>");  
  57.             }  
  58.             ctx.close();  
  59.         }catch (NamingException e) {  
  60.             e.printStackTrace();  
  61.             System.err.println("Problem searching directory: " + e);  
  62.         }  
  63.     }  
  64. }  


以上就是從AD域上拉取域賬號!當然現在Java還有許多其他的jar也能操作AD域,這里不就不多介紹了,有興趣的同伴可以去百度、谷歌!最后給大伙兒看看效果圖:

 

還想多說一句,其實Java原生態的API老好了,所以能用原生態的最好,因為別人提供的jar包如果沒有處理好的話,還不如原生態的呢!感謝大家的關注


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM