日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

AD 域服务简介(二)- Java 获取 AD 域用户

發布時間:2025/3/15 java 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 AD 域服务简介(二)- Java 获取 AD 域用户 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

博客地址:http://www.moonxy.com

關于AD 域服務器搭建及其使用,請參閱:AD 域服務簡介(一) - 基于 LDAP 的 AD 域服務器搭建及其使用

一、前言

先簡單簡單回顧上一篇博文中關于 AD 域和 LDAP目錄訪問協議的基本概念。

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

通常大家都會將 LDAP 與關系數據庫相比,認為 LDAP 是另一種的存貯方式,然后在讀性能上進行比較。實際上,這種對比的基礎是不正確的。LDAP 和關系數據庫是兩種不同層次的概念,后者是存貯方式(同一層次如網絡數據庫,對象數據庫),前者是存貯模式和訪問協議。LDAP 是一個比關系數據庫抽象層次更高的存貯概念,與關系數據庫的查詢語言 SQL 屬同一級別。LDAP 最基本的形式是一個連接數據庫的標準方式。該數據庫為讀查詢作了優化。因此它可以很快地得到查詢結果,不過在其它方面,例如更新,就慢得多。

二、Java 獲取 AD 域用戶

Java 獲取 AD 域用戶通常用于單點登錄(Single Sign On,SSO)。

package com.moonxy.ad;import java.util.Properties;import javax.naming.Context; import javax.naming.NamingEnumeration; import javax.naming.NamingException; import javax.naming.directory.Attribute; import javax.naming.directory.Attributes; import javax.naming.directory.SearchControls; import javax.naming.directory.SearchResult; import javax.naming.ldap.InitialLdapContext; import javax.naming.ldap.LdapContext;/*** @Description:獲取AD域用戶* @author moonxy* @date 2018-05-14*/ public class ADUtils {public static void main(String[] args) {Properties env = new Properties();//使用UPN格式:User@domain或SamAccountName格式:domain\\UserString adminName = "administrator@moonxy.com";String adminPassword = "smartdot&2014";//passwordString ldapURL = "LDAP://192.168.1.103:389";//ip:port env.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.ldap.LdapCtxFactory");env.put(Context.SECURITY_AUTHENTICATION, "simple");//LDAP訪問安全級別:"none","simple","strong"env.put(Context.SECURITY_PRINCIPAL, adminName);// AD Userenv.put(Context.SECURITY_CREDENTIALS, adminPassword);// AD Password env.put(Context.PROVIDER_URL, ldapURL);// LDAP工廠類try {LdapContext ctx = new InitialLdapContext(env, null);//搜索控制器SearchControls searchCtls = new SearchControls();//創建搜索控制器 searchCtls.setSearchScope(SearchControls.SUBTREE_SCOPE);//LDAP搜索過濾器類,此處只獲取AD域用戶,所以條件為用戶user或者person均可//(&(objectCategory=person)(objectClass=user)(name=*))String searchFilter = "objectClass=user";//AD域節點結構String searchBase = "OU=Java開發組,OU=軟件研發部,DC=moonxy,DC=com";String returnedAtts[] = { "url", "employeeID", "mail","name", "userPrincipalName", "physicalDeliveryOfficeName", "departmentNumber", "telephoneNumber", "homePhone", "mobile", "department", "sAMAccountName", "whenChanged"}; // 定制返回屬性 searchCtls.setReturningAttributes(returnedAtts);NamingEnumeration<SearchResult> answer = ctx.search(searchBase, searchFilter,searchCtls);while (answer.hasMoreElements()) {SearchResult sr = (SearchResult) answer.next();System.out.println("<<<::[" + sr.getName()+"]::>>>>");//返回格式一般是CN=xxxx,OU=xxxxAttributes Attrs = sr.getAttributes();//得到符合條件的屬性集 if (Attrs != null) {for (NamingEnumeration ne = Attrs.getAll(); ne.hasMore();) {Attribute Attr = (Attribute) ne.next();//得到下一個屬性System.out.print(Attr.getID().toString() + ":");//讀取屬性值for (NamingEnumeration e = Attr.getAll(); e.hasMore();) {String userInfo = e.next().toString();System.out.print(userInfo);}System.out.println("");}}}ctx.close();}catch (NamingException e) {e.printStackTrace();System.err.println("Problem searching directory: " + e);}} }

輸出的結果如下:

?

轉載于:https://www.cnblogs.com/cnjavahome/p/9038363.html

總結

以上是生活随笔為你收集整理的AD 域服务简介(二)- Java 获取 AD 域用户的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。