博客地址: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\\User
String adminName = "administrator@moonxy.com";
String adminPassword = "smartdot&2014";//password
String 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 User
env.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=xxxx
Attributes 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);
}
}
}

输出的结果如下:

AD 域服务简介(二)- Java 获取 AD 域用户的更多相关文章

  1. AD 域服务简介(三)- Java 对 AD 域用户的增删改查操作

    博客地址:http://www.moonxy.com 关于AD 域服务器搭建及其使用,请参阅:AD 域服务简介(一) - 基于 LDAP 的 AD 域服务器搭建及其使用 Java 获取 AD 域用户, ...

  2. AD 域服务简介(一)- 基于 LDAP 的 AD 域服务器搭建及其使用(转)

    一.前言 1.1 AD 域服务 什么是目录(directory)呢? 日常生活中使用的电话薄内记录着亲朋好友的姓名.电话与地址等数据,它就是 telephone directory(电话目录):计算机 ...

  3. Java获取系统信息(用户目录,临时目录等)

    java.version Java运行时环境版本 java.vendor Java运行时环境供应商 java.vendor.url Java供应商的 URL java.home Java安装目录 ja ...

  4. Azure AD Domain Service(二)为域服务中的机器配置 Azure File Share 磁盘共享

    一,引言 Azure File Share 是支持两种认证方式的! 1)Active Directory 2)Storage account key 记得上次分析的 "Azure File ...

  5. 001.AD域控简介及使用

    一 AD概述 1.1 AD简介 域(Domain)是Windows网络中独立运行的单位,域之间相互访问则需要建立信任关系. 当一个域与其他域建立了信任关系后,2个域之间不但可以按需要相互进行管理,还可 ...

  6. Azure AD Domain Service(一)将 Azure VM 实例添加到域服务里

    一,引言 有网友提到实际项目中如何将 Azuer VM 实例加入到 Azure AD 域,那我们今天就带着整个问题开始今天的分析!首先我们得了解什么是 Azure AD 域服务,Azure AD 域服 ...

  7. Windows 08 R2_创建AD DS域服务(图文详解)

    目录 目录 Active Directory概念 创建第一个AD域控制器 搭建DNS服务器 使用Windows窗口程序创建AD域控制器 AD与LDAP的关系 使用Powershell来创建ADDS域控 ...

  8. 根据当前登录域账号 获取AD用户姓名和所在OU目录

    #region 根据当前登录域账号 获取AD用户姓名和所在OU目录 /// <summary> /// 根据当前登录域账号 获取AD用户姓名和所在OU目录 返回域用户是否存在 /// &l ...

  9. Active Directory 域服务安装与测试

    Active Directory 域服务安装与测试 实验原理: 安装域服务并创建用户,把另一个电脑加入域中,然后用域账户登录以及用本地账户登录测试 实验条件:windows server 2008(域 ...

随机推荐

  1. Jvm内存泄漏

    内存泄漏和内存溢出的关系 内存泄露:指程序中动态分配内存给一些临时对象,但是对象不会被GC所回收,它始终占用内存.即被分配的对象可达但已无用. 内存溢出:指程序运行过程中无法申请到足够的内存而导致的一 ...

  2. Vue-Router中History模式

    目录 history路由 官方示例 Express中间件 客户端兜底404 示例代码托管在:http://www.github.com/dashnowords/blogs 博客园地址:<大史住在 ...

  3. Flutter学习笔记(21)--TextField文本框组件和Card卡片组件

    如需转载,请注明出处:Flutter学习笔记(21)--TextField文本框组件和Card卡片组件 今天来学习下TextField文本框组件和Card卡片组件. 只要是应用程序就少不了交互,基本上 ...

  4. Coablt strike官方教程中文版

    安装和设置 系统要求 Cobalt Strike的最低系统要求 2 GHz +以上的cpu 2 GB RAM 500MB +可用空间 在Amazon的EC2上,至少使用较高核数的CPU(c1.medi ...

  5. python+Selenium-字符运行报错问题

    最近开始接触自动化测试,在写一个简单的查询脚本时,遇到编码无法识别的问题 SyntaxError: Non-ASCII character '\xe5' in file F:/soft_Test/py ...

  6. MySQL-InnoDB锁(二)

    上篇文章中对InnoDB存储引擎中的锁进行学习,本文是实践部分,根据索引和查询范围,探究加锁范围的情况. 在本实例中,创建简单表如下: mysql> select * from t; +---- ...

  7. mybatis 源码分析(四)一二级缓存分析

    本篇博客主要讲了 mybatis 一二级缓存的构成,以及一些容易出错地方的示例分析: 一.mybatis 缓存体系 mybatis 的一二级缓存体系大致如下: 首先当一二级缓存同时开启的时候,首先命中 ...

  8. test-HTML

    吃葡萄不吐葡萄皮- Hello, This is my first html! baidu yiciyuan 防止嗅探 faststone capture picture movie          ...

  9. unity_UGUI养成之路01

    1.UGUI_UI之音量设计  2.控制音量音效的开关 实现开和关的互斥点击 实现开与关画面的显示 注意,上图并未选择分组.具体原因博主尚不清楚如果有知道的可以告知一二,谢谢各位!!! 代码: usi ...

  10. KVC的使用

    KVC的使用如下: (1)利用给对象的属性赋值,调用如下两个方法 - (void)setValue:(nullable id)value forKey:(NSString *)key; - (void ...