java以及C#获取AD域上用户信息

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java以及C#获取AD域上用户信息相关的知识,希望对你有一定的参考价值。

JAVA


/**
 *  JAVA 读取AD用户信息
 *  aa00a00
 */
package com.wanda.sso.client.servlet;

import java.util.Hashtable;

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;

public class ADOperTest {

 public ADOperTest() {
 }

 public void GetADInfo() {
  String userName = "xueqiang"; // 用户名称
  String passwd = "123456";
  String host = "10.0.4.26"; // AD服务器
  String port = "389"; // 端口
  String domain = "@wanda-dev.cn"; // 邮箱的后缀名
  String url = new String("ldap://" + host + ":" + port);
  String user = userName.indexOf(domain) > 0 ? userName : userName
    + domain;
  Hashtable HashEnv = new Hashtable();
  // String adminName ="CN=oyxiaoyuanxy,CN=Users,DC=Hebmc,DC=com";//AD的用户名
  String adminName = "xueqiang"; // 注意用户名的写法:domain\User 或
  // [email protected]
  adminName = "xueqiang"; // 注意用户名的写法:domain\User 或 [email protected]
  String adminPassword = "123456"; // 密码
  HashEnv.put(Context.SECURITY_AUTHENTICATION, "simple"); // LDAP访问安全级别
  HashEnv.put(Context.SECURITY_PRINCIPAL, adminName); // AD User
  HashEnv.put(Context.SECURITY_CREDENTIALS, adminPassword); // AD Password
  HashEnv.put(Context.INITIAL_CONTEXT_FACTORY,
    "com.sun.jndi.ldap.LdapCtxFactory"); // LDAP工厂类
  HashEnv.put(Context.PROVIDER_URL, url);
  try {
   LdapContext ctx = new InitialLdapContext(HashEnv, null);
   // 域节点
   String searchBase = "DC=wanda-dev,DC=cn";
   // LDAP搜索过滤器类
   String searchFilter = "objectClass=User";
   // 搜索控制器
   SearchControls searchCtls = new SearchControls(); // Create the
   // search
   // controls
   // 创建搜索控制器
   searchCtls.setSearchScope(SearchControls.SUBTREE_SCOPE); // Specify
   // the
   // search
   // scope
   // 设置搜索范围
   // searchCtls.setSearchScope(SearchControls.OBJECT_SCOPE); //
   // Specify the search scope 设置搜索范围
   String returnedAtts[] = { "memberOf", "distinguishedName",
     "Pwd-Last-Set", "User-Password", "cn" };// 定制返回属性
   // String returnedAtts[] = { "url", "whenChanged", "employeeID",
   // "name", "userPrincipalName", "physicalDeliveryOfficeName",
   // "departmentNumber", "telephoneNumber", "homePhone",
   // "mobile", "department", "sAMAccountName", "whenChanged",
   // "mail" }; // 定制返回属性
   searchCtls.setReturningAttributes(returnedAtts); // 设置返回属性集

   // 根据设置的域节点、过滤器类和搜索控制器搜索LDAP得到结果
   NamingEnumeration answer = ctx.search(searchBase, searchFilter,
     searchCtls);// Search for objects using the filter

   // 初始化搜索结果数为0
   int totalResults = 0;// Specify the attributes to return
   int rows = 0;

   while (answer.hasMoreElements()) {// 遍历结果集
    SearchResult sr = (SearchResult) answer.next();// 得到符合搜索条件的DN
    System.out.println(++rows
      + "************************************************");
    System.out.println(sr.getName());
    Attributes Attrs = sr.getAttributes();// 得到符合条件的属性集
    if (Attrs != null) {
     try {
      for (NamingEnumeration ne = Attrs.getAll(); ne
        .hasMore();) {
       Attribute Attr = (Attribute) ne.next();// 得到下一个属性
       System.out.println(" AttributeID=属性名:"
         + Attr.getID().toString());
       // 读取属性值
       for (NamingEnumeration e = Attr.getAll(); e
         .hasMore(); totalResults++) {
        System.out.println("    AttributeValues=属性值:"
          + e.next().toString());
       }
       System.out.println("    ---------------");
       // 读取属性值
       // Enumeration values = Attr.getAll();
       // if (values != null) { // 迭代
       // while (values.hasMoreElements()) {
       // System.out.println("    AttributeValues=属性值:"+
       // values.nextElement());
       // }
       // }
       // System.out.println("    ---------------");
      }
     } catch (NamingException e) {
      System.err.println("Throw Exception : " + e);
     }
    }
   }
   System.out
     .println("************************************************");
   System.out.println("Number: " + totalResults);
   ctx.close();
  } catch (NamingException e) {
   e.printStackTrace();
   System.err.println("Throw Exception : " + e);
  }
 }

 public static void main(String args[]) {
  // 实例化
  ADOperTest ad = new ADOperTest();
  ad.GetADInfo();
 }
}

 


 

C#

myLDAPPath = "LDAP://你的域名";

                    DirectoryEntry mySearchRoot = new DirectoryEntry(myLDAPPath);
                    DirectorySearcher myDirectorySearcher = new DirectorySearcher(mySearchRoot);

                    #region all informations

                    myDirectorySearcher.Filter = ("(objectClass=user)"); //user表示用户,group表示组
                    foreach (SearchResult mySearchResult in myDirectorySearcher.FindAll())
                    {
                         if (mySearchResult != null)
                         {
                              // Get the properties of the ‘mySearchResult‘.
                              ResultPropertyCollection myResultPropColl;
                              myResultPropColl = mySearchResult.Properties;
                              Console.WriteLine("The properties of the ‘mySearchResult‘ are :");

                              foreach (string myKey in myResultPropColl.PropertyNames)
                              {
                                   string tab = "    ";
                                   Console.WriteLine(myKey + " = ");
                                   foreach (Object myCollection in myResultPropColl[myKey])
                                   {
                                        Console.WriteLine(tab + myCollection);
                                   }
                              }
                              mySearchRoot.Dispose();
                         }
                    }

 


 

以上是关于java以及C#获取AD域上用户信息的主要内容,如果未能解决你的问题,请参考以下文章

java ldap - 获取信息是对 AD 的更改

如何提取AD域中的用户名和密码等信息

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

如何用java判断用户已经在AD域中已经登录?求指教,求高人

AD 域服务简介- Java 对 AD 域用户的增删改查操作

如何从Azure AD B2C获取用户组信息