`
aa00aa00
  • 浏览: 333006 次
  • 性别: Icon_minigender_1
  • 来自: 沈阳
文章分类
社区版块
存档分类
最新评论

JAVA 读取AD用户信息

 
阅读更多

/**
 *  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 或
  // User@domain.com
  adminName = "xueqiang"; // 注意用户名的写法:domain\User 或 User@domain.com
  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();
 }
}

分享到:
评论

相关推荐

    AD域分页查询全部域用户数据

    因此,"AD域分页查询全部域用户数据"是一种优化查询效率的方法,它允许管理员分批获取用户信息,而不是一次性加载。 首先,我们需要理解AD域分页查询的工作原理。在Java中,我们可以使用JNDI(Java Naming and ...

    java ad域操作

    总结起来,Java通过JNDI和相关的库提供了强大的能力来操作AD域,包括连接、查询、读写属性、用户认证、对象的创建与删除等。在实际开发中,应确保遵循最佳实践,确保代码的健壮性和安全性。理解并熟练掌握这些概念和...

    验证AD域账号登陆,获取AD域用户列表,获取用户邮箱

    验证AD域账号登陆,获取AD域用户列表,获取用户邮箱,修改密码等AD域操作

    ldap 连接 AD

    1. 加载配置:读取ldap.properties文件,获取AD服务器的连接信息。 2. 创建上下文:使用JNDI的InitialDirContext构造函数,传递服务器信息和认证凭据。 3. 执行操作:通过上下文对象执行查询、添加、删除、修改等...

    基于java语言开发的基于Microsoft Graph Restful API的多全局管理系统.zip

    “基于Java语言开发的基于Microsoft Graph Restful API的多全局管理系统”是一个利用Java编程语言构建的系统,该系统与Microsoft Graph API进行交互,实现对Microsoft Office 365服务的各种操作,如访问用户信息、...

    java实现ftp自动上传文件

    JTextArea是Java Swing组件,常用于显示多行文本,这里可能被用来实时显示FTP上传过程中的日志信息,为用户提供可视化的上传状态。而Log4j是一个流行的Java日志框架,用于记录程序运行时的各种信息,开发者可能会...

    Java RMS相关实例附源码.rar

    3. **数据序列化和反序列化**:由于RMS处理的是字节流,你需要将Java对象转换为字节序列并反之,以便于存储和读取。 4. **错误处理**:了解如何处理常见的RMS异常,如RecordStoreFullException、...

    基于嵌入式AD数据采集

    这些程序可以接收来自嵌入式系统的AD数据,进行统计分析、滤波处理,然后用图表库(如Matplotlib、Charts.js、Chart.NET等)绘制出实时或历史的AD数据曲线,以便于用户直观地观察和理解采集结果。 总结来说,"基于...

    java练习题 试卷

    5. 顺序存储:磁带是顺序存储信息的设备,适合大量数据的连续读写。 6. 程序设计语言发展:通常顺序是机器语言、汇编语言、高级语言。 7. 编译器:编译器将源程序翻译成机器语言的目标程序。 8. 字节码:字节码是...

    多个版本完整的java的雷电代码

    8. `java+%E5%A4%9A%E7%BA%BF%E7%A8%8B%E5%90%8C%E6%AD%A5%E6%96%B9%E6%B3%95%E7%9A%84%E5%AE%9E%E4%BE%8B.zip` - 多线程同步方法的Java实例,可能用于处理游戏中的并发问题。 9. `PlaneGame` 和 `JavaBattle` - ...

    Office365-Java-Connect:从 Java 应用程序到 Office 365 和 Outlook API 的身份验证示例

    此示例演示了如何从 Java 应用程序和调用一些 API 对 Office 365 用户进行身份验证。 此示例使用获取验证令牌,然后使用它们调用特定的 API。 详细地说,该示例执行以下操作: 创建访问和刷新令牌以调用 Azure AD ...

    java错误提示英汉对照

    - **Access存取、取用**:访问控制机制的一部分,指能够读取或者修改某个变量的能力。 - **Accesslevel存取级别**:定义了如何从其他类中访问当前类的成员。 - **Accessfunction存取函式/访问函数**:用于获取或者...

    ads1115初始化配置读取程序

    `ads1115.c`和`ads1115.h`文件中的函数实现了这些功能,允许用户轻松地在STM32项目中集成ADS1115,以实现精确的模拟信号测量。通过详细的测试,可以确保程序在实际应用中能够稳定、准确地运行。

    windows AD 活动目录编程指南

    在Windows操作系统环境中,活动目录(Active Directory,简称AD)是一种重要的身份验证和资源管理服务,它使得企业可以集中管理用户账户、计算机、网络资源和安全策略。本编程指南主要涉及了如何利用AD进行开发,...

    JAVA计算器 不包含括号可运算乘除加减以及三角函数

    总之,"JAVA计算器 不包含括号可运算乘除加减以及三角函数"这个项目涵盖了基础的Java语法、数学运算、用户输入处理、以及`Math`类的使用。这些都是Java编程和算法设计的基础,对于提升编程技能非常有帮助。

    java19题厦门理工学院

    根据给定的文件信息,我们可以总结出几个与Java编程相关的知识点。这些代码示例主要涉及了基础的控制结构、数组操作、字符串处理以及简单的算法应用等。下面将逐一进行详细解释。 ### 一、古埃及探秘-金字塔 这段...

    java文件加密系统

    - 示例密钥:`AD67EA2F3BE6E5ADD368DFE03120B5DF92A8FD8FEC2F0746` 3. **加密流程**: - 将源文件读取到内存中。 - 分别使用三个不同的56位密钥对文件内容进行加密。 - 加密后的文件保存为`.tdes`格式。 #### ...

    Java:使用COM4J从Active Directory检索用户信息,例如电子邮件和职位

    在Java开发中,有时我们需要与Microsoft的Active Directory(AD)进行交互,以便获取或更新用户信息,如电子邮件和职位等。Active Directory是一个目录服务,它主要用于存储和管理组织中的网络资源,包括用户账户、...

    Java操作ldap(springboot工程)

    3. **数据转换**: 设计一个转换类,使用反射方法读取ldap条目的属性,并将其赋值给对应的Java对象。 4. **查询操作**: 使用`LdapTemplate`进行查询、增删改查等操作。例如,查找特定用户、更新用户信息等。 5. **...

    IKM在线测试 JAVA 带参考答案

    根据提供的信息,我们可以推断这份文档是一份针对IKM在线测试中的JAVA部分的题目与参考答案列表。然而,具体的题目内容并未给出。为了满足生成详细知识点的要求,我们将基于这些信息,构建一个假设的情境,并围绕...

Global site tag (gtag.js) - Google Analytics