java擷取windows Active Directory資訊__Java基礎

來源:互聯網
上載者:User

     通過java原生態的api就可以擷取到windows AD資訊,想要瞭解windows Active Directory是個什麼東東,自己可以查閱相關資料,一般來說windows系統安裝完後可能不會內建AD查看器,我們需要通過下載軟體進行update,下載地址:https://www.technipages.com/windows-install-active-directory-users-and-computers,安裝完AD我們可以通過AD查看器查看到如下資訊,我們還可以通過一些工具比如LDAPSoft Ldap Browse查看AD資訊:


上圖就是我的windows電腦所顯示的AD資訊,我的是win10系統,上面顯示的屬性中我們可以通過java api擷取到

得到LdapContext資訊,要擷取到LdapContext資訊,我們需要提供開通389連接埠的ldap協議的電腦ip、domain、使用者名稱及密碼資訊,否則擷取會報錯:

public class LdapContextFactory {private static LdapContext ldapContext;public static LdapContext getLdapContext(String url, String domain, String username, String password) {if (ldapContext == null) {try {Hashtable<String, String> environment = getActiveDirectoryEnvironment(url, domain, username, password);ldapContext = new InitialLdapContext(environment, null);} catch (NamingException e) {e.printStackTrace();}}return ldapContext;}private static Hashtable<String, String> getActiveDirectoryEnvironment(String url, String domain, String username,String password) {Hashtable<String, String> environment = new Hashtable<>();environment.put("java.naming.factory.initial", "com.sun.jndi.ldap.LdapCtxFactory");environment.put("java.naming.security.authentication", "simple");environment.put("java.naming.provider.url", url);environment.put("java.naming.security.principal", username + "@" + domain);environment.put("java.naming.security.credentials", password);return environment;}}

擷取所有屬性資訊

public static void getAllAttribute(LdapContext ldapContext){try {System.out.println("validate success :" + ldapContext);Name name = new LdapName("dc=centmfademo,dc=com");Attributes allAttrs = ldapContext.getAttributes(name);if (null == allAttrs) {System.out.println("no attributes");return;}for (NamingEnumeration<?> attrs = allAttrs.getAll(); attrs.hasMore();) {Attribute attr = (Attribute) attrs.next();System.out.println("attr : " + attr.getID());for (NamingEnumeration<?> values = attr.getAll(); values.hasMore();) {System.out.println("\tvalue : " + values.next());}}System.out.println("-------------------------------------------");} catch (AuthenticationException e) {e.printStackTrace();} catch (NamingException e) {e.printStackTrace();System.out.println("validate faliure :" + e);} finally {try {ldapContext.close();} catch (NamingException e) {e.printStackTrace();}}}
擷取定製屬性資訊:

public static void getSpecialAttribute(LdapContext ldapContext){try{SearchControls searchControls = new SearchControls();searchControls.setSearchScope(SearchControls.SUBTREE_SCOPE);String returnedAtts[] = {"memberOf","dSCorePropagationData"};//定製返回屬性/*String returnedAtts[] = { "url", "whenChanged", "employeeID", "name", "userPrincipalName","physicalDeliveryOfficeName", "departmentNumber", "telephoneNumber", "homePhone", "mobile","department", "sAMAccountName", "whenChanged", "mail" }; // 定製返回屬性*/searchControls.setReturningAttributes(returnedAtts); // 設定返回屬性集String searchBase = "DC=centmfademo,DC=com"; //Specify the Base for the search//搜尋域節點 //(&(objectClass=user))//(&(objectClass=user)(sAMAccountName=dev001))//(&(objectClass=user)(sAMAccountName=dev001)(givenName=dev))String searchFilter = "objectClass=User"; //specify the LDAP search filter  //String searchFilter = "objectClass=organizationalUnit";//specify the LDAP search filter NamingEnumeration<SearchResult> searchResults = ldapContext.search(searchBase, searchFilter,searchControls);while(searchResults.hasMoreElements()){SearchResult searchResult = searchResults.next();System.out.println(searchResult.getName());Attributes allAttrs = searchResult.getAttributes();//System.out.println(allAttrs.get("mail"));if (null == allAttrs) {System.out.println("no attributes");return;}for (NamingEnumeration<?> attrs = allAttrs.getAll(); attrs.hasMore();) {Attribute attr = (Attribute) attrs.next();System.out.println("attr : " + attr.getID());//System.out.println("attr get : " + attr.get().toString());for (NamingEnumeration<?> values = attr.getAll(); values.hasMore();) {System.out.println("\tvalue : " + values.next());}/*Enumeration<?> values = attr.getAll();if(values != null){while(values.hasMoreElements()){System.out.println(" AttributeValues=" + values.nextElement()); }}*/}}} catch (AuthenticationException e) {e.printStackTrace();} catch (NamingException e) {e.printStackTrace();System.out.println("validate faliure :" + e);} finally {try {ldapContext.close();} catch (NamingException e) {e.printStackTrace();}}}
編寫我們的測試類別進行測試

public static void main(String[] args) {String url = "ldap://127.0.0.1:389";// 19.201.String domain = "testademo.com";String username = "administrator"; // 使用者名稱稱String password = "testhello"; // 密碼LdapContext ldapContext = LdapContextFactory.getLdapContext(url, domain, username, password);getAllAttribute(ldapContext);getSpecialAttribute(ldapContext);}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.