`
king_tt
  • 浏览: 2096016 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

java获取AD域用户信息

 
阅读更多
java如何获取AD域用户信息?
http://aa00aa00.iteye.com/blog/1276936
http://blog.sina.com.cn/s/blog_6ef2c4540100nuvq.html
 
package com.webservice.message;
 
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 String GetADInfo(String name ) {
 
  String userName = name; // 用户名称
  if(userName==null){
 userName = "";
  }
  String company = "";
  String host = "10.10.10.21"; // AD服务器
  String port = "389"; // 端口
  String url = new String("ldap://" + host + ":" + port);
  Hashtable HashEnv = new Hashtable();
  // String adminName ="CN=oyxiaoyuanxy,CN=Users,DC=Hebmc,DC=com";//AD的用户名
  String adminName = "cq\\administrator"; // 注意用户名的写法:domain\User 
  String adminPassword = "prd@"; // 密码
  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 = "OU=重庆烟草,DC=cq,DC=tobacco,DC=com,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[] = { "company" };// 定制返回属性
   
   // 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
      + "************************************************");
    
    String dn = sr.getName();
    System.out.println(dn);
    String match = dn.split("CN=")[1].split(",")[0];//返回格式一般是CN=ptyh,OU=专卖
    System.out.println(match);
    if(userName.equals(match)){
    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++) {
      company =  e.next().toString();
        System.out.println("    AttributeValues=属性值:" + company);
       }
       System.out.println("    ---------------");
       
      }
     } catch (NamingException e) {
      System.err.println("Throw Exception : " + e);
     }
    }//if
    }
   }//while
   System.out.println("************************************************");
   System.out.println("Number: " + totalResults);
   ctx.close();
  } catch (NamingException e) {
   e.printStackTrace();
   System.err.println("Throw Exception : " + e);
  }
  return company;
 }
 public static void main(String args[]) {
  // 实例化
  ADOperTest ad = new ADOperTest();
  ad.GetADInfo("shz");
 }
}

分享到:
评论

相关推荐

    java验证AD域用户登录

    验证AD域用户登录 ,传入用户名(userName)和密码(password)进行验证。

    java使用ldap修改ad域用户密码

    java使用ldap修改ad域用户密码

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

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

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

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

    Springboot-LDAP针对AD域控做用户和组织进行同步.zip

    Springboot-LDAP针对AD域控做用户和组织进行同步

    AD域控 AD域配置详解

    AD域配置详解,这是一个对于新手来说,不了解AD,是一个很好的东东

    Java并发编程(学习笔记).xmind

    (4)用户界面具备更短的响应时间:现代GUI框架中大都使用一个事件分发线程(类似于中断响应函数)来替代主事件循环,当用户界面用有事件发生时,在事件线程中将调用对应的事件处理函数(类似于中断处理函数) ...

    Java并发编程实战

    Java并发编程实战 本书深入浅出地介绍了Java线程和并发,是一本完美的Java并发参考手册。书中从并发性和线程安全性的基本概念出发,介绍了如何使用类库提供的基本并发构建块,用于避免并发危险、构造线程安全的类及...

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

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

    ASP200问.EXE

    49.如何获取用户浏览器信息 50.如何获取用户真实的IP地址 52.如何判断网站的虚拟物理路径 53.如何解决URL含有特殊字符引发的错误 第4章 ASP组件 55.如何使用Browser Capabilities组件获取浏览器信息 56.如何使用Ad...

    JSTL详细标签库介绍

    那么该程序会运行默认异常处理程序,退出JAVA,若Applet或基于GUI的APP,当一个异常未被“捕获”,GUI在运行默认异常处理程序依然会显示,而且用户使用的GUI处于一个不稳定的状态))<BR>JAVA代码中:1、可能出现...

    Oracle9i的init.ora参数中文说明

    说明: 确定查询是否获取表级的读取锁, 以防止在包含该查询的事务处理被提交之前更新任何对象读取。这种操作模式提供可重复的读取, 并确保在同一事务处理种对相同数据的两次查询看到的是相同的值。 值范围: TRUE | ...

    autoJS1688示例.zip

    AD790179-8D8A-4CC6-BF68-25D58C7FD745.js adb5037常用命令.js aes加解密000.js AES加解密demo.js after work.js AJ-网易云签到.js AJ_api_search(1).js AJ_api_search.js aj内置文件管理.js AJ功能搜索(1...

Global site tag (gtag.js) - Google Analytics