`
aa00aa00
  • 浏览: 325516 次
  • 性别: 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域账号登陆,获取AD域用户列表,获取用户邮箱,修改密码等AD域操作

    ads1115初始化配置读取程序

    stm32 驱动ads1115 初始化 配置 读取 程序 已测试通过

    ldapService_ldapsync_

    java 通过LDAP 读取AD用户信息,支持定期同步,手工同步

    读取DXF文件并对其图形进行旋转

    在vc++里读取DXF文件 并对其图形进行任意角度的旋转,显示旋转后的图形

    一个java正则表达式工具类源代码.zip(内含Regexp.java文件)

    * [a-z&&[^bc]] a through z, except for b and c: [ad-z] (subtraction) [a-z&&[^bc]] 从a 到 z, 但 b 和 c 除外: [ad-z] (子集) * [a-z&&[^m-p]] a through z, and not m through p: [a-lq-z](subtraction...

    C programming-读取DAT数据,转成wav格式文件

    DAT数据格式 5A 5A 5A 5A xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx ( 帧头 ) 帧头后面依次为第一块AD通道1数据(2 byte),第二块AD通道1数据(2 byte),第一块AD通道2数据(2 ...

    pcf8591control:通过来自openHAB的Raspberry Pi的I2C控制芯片pcf8591(AD转换器)

    通过来自openHAB的Raspberry Pi的I2C控制芯片pcf8591(AD转换器) 芯片PCF8591是AD转换器,提供电压测量并返回0到255之间的值。 PCF8591的地址范围: 72-80(0x48-0x50) 该绑定仅支持读取值。 在* .item文件中配置...

    PrimitiveCollections:支持无符号和可空类型的另一个Java原语集合

    Java原始集合This is nightly bleeding-edge release支持无符号和可空类型的另一个Java原语集合采纳了最好的主意即将到来的AdHoc协议解析器代码生成器将需要添加新的功能,即无符号和可为空的原始类型。首先,我对...

    StarUML 中文绿色版 part2

     ● 正反向工程:StarUML可以依据类图的内容生成Java、C++、C#代码,也能够读取Java、C++、C#代码反向生成类图。反向工程有两个主要用途,其一是旧有的源码反转成图之后,可以构建UML模型的方式继续将新的设计添加...

    rss浏览器-demo

    设计一个基于网络的RSS新闻...问题:在写读取网络上的数据时因为用的rome的包,结果出现了很严重的效率问题,在第一次读取页面的时候时间超长。因为整个结构已经写好了,也懒的改了,你们可以在我的注释中看到那段代码

    2020电赛A题代码整理

    手机端(android),主显示端,姿态检测手环端,心率滤波读取端 mcu 采用的是esp32.结合了适配esp32的arduino以及rtos框架进行开发。 开发环境 及 语言 安卓为android studio java开发 esp32为platform io c/c++ ...

    2020年ti杯电赛省赛A题代码整理

    手机端(android),主显示端,姿态检测手环端,心率滤波读取端 mcu 采用的是esp32.结合了适配esp32的arduino以及rtos框架进行开发。 开发环境 及 语言 安卓为android studio java开发 esp32为platform io c/...

    ASP200问.EXE

    45.如何使用Cookie记录用户访问信息 46.如何用Cookie实现仅弹出一次同样的窗口 48.如何清除页面缓存 49.如何获取用户浏览器信息 50.如何获取用户真实的IP地址 52.如何判断网站的虚拟物理路径 53.如何解决URL含有特殊...

    IIS6.0 IIS,互联网信息服务

    Internet Information Services(IIS,互联网信息服务),是由微软公司提供的基于运行Microsoft Windows的互联网基本服务。最初是Windows NT版本的可选包,随后内置在Windows 2000、Windows XP Professional和...

    网管教程 从入门到精通软件篇.txt

    /r 找到坏扇区并恢复可读取的信息。隐含着 /p 参数。  注意 Chkdsk 命令需要 Autochk.exe 文件。如果不能在启动目录(默认为 %systemroot%System32)中找到该文件,将试着在 Windows 安装 CD 中找到它。如果有多...

    Oracle9i的init.ora参数中文说明

    请注意所有用户均可读取或写入 UTL_FILE_DIR 参数中指定的所有文件。 值范围: 任何有效的目录路径。 默认值: 无 plsql_v2_compatibility: 说明: 设置 PL/SQL 兼容级。如果设置为 FALSE, 将执行 PL/SQL V3 行为, ...

    javascript读写XML实现广告轮换(兼容IE、FF)

    xml结构如下 代码如下:<ad><tupian>...// JScript 文件 var Now = new Date(); var Min 

    autoJS1688示例.zip

    00-读取txt文本每一行&去空格.js 00-通知相册.js 001-Hello JS.js 002-if条件.js 003-循环break.js 004-循环for.js 005-循环while.js 0根据图色点击.js 0计分器.js 1(1).js 1.js 1024下载.js 11.js ...

    oauth2-samples

    “ 2d1ad3c6-6454-43d7-81b2-4f9a553e531a” token_type:“ bearer” refresh_token:“ 31a770cf-a4ff-4ed2-a745-cee798610cec” expires_in:59范围:“读写”} 使用参考令牌获取新令牌curl -X POST -vu ...

    hydropowerfx-fs18-danielobrist:由GitHub Classroom创建的hydropowerfx-fs18-danielobrist

    根据AD上的任务描述,实现基于JavaFX的应用程序。 此处提供的描述具有权威性,这里是最重要的要点: 使用“应用程序模板”的指定结构进行实施。 不允许使用SceneBuilder和FXML。 对于4.0,必须实现以下基本功能...

Global site tag (gtag.js) - Google Analytics