隨着我們的習大大上台后,國家在網絡信息安全方面就有了很明顯的改變!所以現在好多做網絡信息安全產品的公司和需要網絡信息安全的公司都會提到用AD域服務器來驗證,這里就簡單的研究了一下!
先簡單的講講AD域和LdAP目錄訪問協議:AD(active directory)活動目錄,動態的建立整個域模式網絡中的對象的數據庫或索引,協議為LDAP,安裝了AD的服務器稱為DC域控制器,存儲整個域的對象的信息並周期性更新!其中的對象分為三大類——資源(如印表機)、服務(如電子郵件)、和人物(即帳戶或用戶,以及組)。
不少LDAP開發人員喜歡把LDAP與關系數據庫相比,認為是另一種的存貯方式,然后在讀性能上進行比較。實際上,這種對比的基礎是錯誤的。LDAP和關系數據庫是兩種不同層次的概念,后者是存貯方式(同一層次如網絡數據庫,對象數據庫),前者是存貯模式和訪問協議。LDAP是一個比關系數據庫抽象層次更高的存貯概念,與關系數據庫的查詢語言SQL屬同一級別。LDAP最基本的形式是一個連接數據庫的標准方式。該數據庫為讀查詢作了優化。因此它可以很快地得到查詢結果,不過在其它方面,例如更新,就慢得多。AD域和LdAP目錄訪問協議就介紹到這里!下面來看看簡單的demo吧!
- /**
- * @Description:
- *
- * @Title: LdAPTest.java
- * @Package com.joyce.itext.main
- * @Copyright: Copyright (c) 2014
- *
- * @author Comsys-LZP
- * @date 2014-8-7 上午10:20:22
- * @version V2.0
- */
- package com.joyce.itext.main;
- import java.util.Properties;
- import javax.naming.Context;
- import javax.naming.NamingEnumeration;
- import javax.naming.NamingException;
- import javax.naming.directory.SearchControls;
- import javax.naming.directory.SearchResult;
- import javax.naming.ldap.InitialLdapContext;
- import javax.naming.ldap.LdapContext;
- /**
- * @Description:拉取AD域賬戶
- *
- * @ClassName: LdAPTest
- * @Copyright: Copyright (c) 2014
- *
- * @author Comsys-LZP
- * @date 2014-8-7 上午10:20:22
- * @version V2.0
- */
- public class LdAPTest {
- public static void main(String[] args) {
- Properties env = new Properties();
- String adminName = "administrator@2003.com";//username@domain
- String adminPassword = "admin";//password
- String ldapURL = "LDAP://10.10.2.153:389";//ip:port
- env.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.ldap.LdapCtxFactory");
- env.put(Context.SECURITY_AUTHENTICATION, "simple");//"none","simple","strong"
- env.put(Context.SECURITY_PRINCIPAL, adminName);
- env.put(Context.SECURITY_CREDENTIALS, adminPassword);
- env.put(Context.PROVIDER_URL, ldapURL);
- try {
- LdapContext ctx = new InitialLdapContext(env, null);
- SearchControls searchCtls = new SearchControls();
- searchCtls.setSearchScope(SearchControls.SUBTREE_SCOPE);
- String searchFilter = "(&(objectCategory=person)(objectClass=user)(name=*))";
- String searchBase = "DC=2003,DC=com";
- String returnedAtts[] = {"memberOf"};
- searchCtls.setReturningAttributes(returnedAtts);
- NamingEnumeration<SearchResult> answer = ctx.search(searchBase, searchFilter,searchCtls);
- while (answer.hasMoreElements()) {
- SearchResult sr = (SearchResult) answer.next();
- System.out.println("<<<::[" + sr.getName()+"]::>>>>");
- }
- ctx.close();
- }catch (NamingException e) {
- e.printStackTrace();
- System.err.println("Problem searching directory: " + e);
- }
- }
- }
以上就是從AD域上拉取域賬號!當然現在Java還有許多其他的jar也能操作AD域,這里不就不多介紹了,有興趣的同伴可以去百度、谷歌!最后給大伙兒看看效果圖:
還想多說一句,其實Java原生態的API老好了,所以能用原生態的最好,因為別人提供的jar包如果沒有處理好的話,還不如原生態的呢!感謝大家的關注