文档章节

如何连接ldap active directory服务并从中获取数据

Bunnykun
 Bunnykun
发布于 2016/04/12 17:45
字数 635
阅读 773
收藏 0
点赞 1
评论 0

    

    最近在公司写内设文档, 发现用户登录时, 需要连接访问active directory服务并获取里面存储的用户数据, 进行域控处理。我, 刚出来, 看着其实挺懵的, 便马上上网查资料了。

    总体来说, ldap是一种数据存储的东西, 一种树状结构的目录, 能提高检索数据的效率,  active directory是微软提供的ldap服务。关于概念的部分, 当然还是需要大家的补充, 下面我将具体连接和获取数据的java代码写下来, 以供大家参(#‵′)kao。


利用JNDI技术连接Active Directory服务

    首先, 你需要封装连接active directory服务的参数对象

    (可以将连接参数都存放在poperties文件中, 方便修改)

server.system-info-setting.connect-host localhost
server.system-info-setting.connect-port 10389
server.system-info-setting.security-level simple
server.system-info-setting.user-identification-name cn={0}, ou=system (ldap目录结构)
server.system-info-setting.search-filter *
server.system-info-setting.timeout-time 30000
    获取配置文件信息后便可以通过必要的参数连接服务

    //创建对象名为env的Hashtable<String, String>集合 
    Hashtable<String, String> env = new Hashtable<>(); 
    //设置初始化Context Factory 
    env.put(DirContext.INITIAL_CONTEXT_FACTORY, LDAP_CONTEXT_FACTORY); 
    //设置LDAP目标URL 
    String url = MessageFormat.format(PROVIDER_URL, host, port); 
    env.put(DirContext.PROVIDER_URL, url); 
    //设置安全级别 
    env.put(DirContext.SECURITY_AUTHENTICATION, level); 
    //设置LDAP识别名 
    env.put(DirContext.SECURITY_PRINCIPAL, dn); 
    //设置密码 
    env.put(DirContext.SECURITY_CREDENTIALS, password); 
    //设置连接等待时长 
    env.put("com.sun.jndi.ldap.connect.timeout", timeout); 
    //设置JNDI参数 
    env.put("com.sun.jndi.ldap.connect.pool", "true"); 
    env.put("com.sun.jndi.connect.pool.debug", "all"); 
    //创建实例区连接Active Directory 
    //dircon是DirContext类的对象
    dircon = new InitialDirContext(env);

获取信息

    在检索active directory服务中信息时, 可以传递dn作为用户标识去获取匹配的用户信息, 并且也能过滤相对应的字符串信息

        SearchControls searchControls = new SearchControls();
        //设置SearchControls的范围
        searchControls.setSearchScope(SearchControls.SUBTREE_SCOPE);

        //检索用户信息
        NamingEnumeration<SearchResult> result = dircon.search(dn, filter, searchControls);

        if (!result.hasMore())
            //MESSAGE_FAILURE_SEARCH : 检索失败
            throw new Exception(MESSAGE_FAILURE_SEARCH);

        //获取下一行信息
        SearchResult searchResult = result.next();
        //获取数据所有属性
        NamingEnumeration<?> attributes = searchResult.getAttributes().getAll();

        //创建一个Map对象
        Map<String, Object> resultMap = new HashMap<String, Object>();

        //循环遍历属性集合
        while (attributes.hasMore()) {
            //获取单个属性
            Attribute attr = (Attribute) attributes.nextElement();
            //获取单个值
            Enumeration<?> values = attr.getAll();
            if (values.hasMoreElements())
                resultMap.put(attr.getID(), values.nextElement());
        }

        if (resultMap.isEmpty())
        、  //MESSAGE_FAILURE_SEARCH : 检索失败
            throw new Exception(MESSAGE_FAILURE_SEARCH);
        //获取数据后返回Map集合
        return resultMap;

© 著作权归作者所有

共有 人打赏支持
Bunnykun
粉丝 1
博文 1
码字总数 635
作品 0
广州
程序员
译文: Spring Security 与 Active Directory LDAP 例子

Spring Security Active Directory LDAP Example 说明 最近有一个用户需求,让我利用Spring Security结合他们内部的Active Directory (AD) LDAP服务器完成网页程序授权机制. 我搜了很多资料与...

littlebrain4solving
2017/07/27
0
0
java访问ad域

1.活动目录(AD) Active Directory 是用于 Windows Server 的目录服务。 它存储着网络上各种对象的有关信息,并使该信息易于管理员和用户查找及使用。 Active Directory 目录服务使用结构化...

文艺小青年
2017/07/06
0
0
活动目录(一)

一、域服务概述 Active Directory的directory用来存放用户账号、计算机、打印机与共享文件夹等对象,这些对象的存储位置成为目录数据库。域内提供目录服务的组件是Active Directory Domain S...

kafein
2014/05/30
0
0
windows2008r2管理与安装 读书笔记 -----------actice directory 概念部分

前边的话:由于单位的服务器95%以上都是用的winserver操作系统,所以首先从基本的入手吧 关于active directory这个知识点,我首先从书上的概念学起,了解这些概念,然后再尝试的实践,关于需...

ytds
2014/06/23
0
0
Windows Server 2008 Active Directory 域服务新增功能

Windows Server 2008 Active Directory 域服务新增功能Posted by 尹揆 本文转载自Gil Kirkpatrick Gil Kirkpatrick 是 NetPro 的 CTO,他自 1996 年起便一直参与开发 Active Directory 软件。...

余二五
2017/11/23
0
0
Windows Server 2016-Active Directory域服务端口汇总

本章为大家简单整理一下有关Windows server Active Directory和Active Directory域服务(AD DS)组件的端口要求。生产环境中我们在做网络调整、防火墙或者开关端口白名单等操作的时候,很多时...

wenzhongxiang
03/19
0
0
将 MediaWiki 与 LDAP 集成

简介: 学习如何向 MediaWiki 添加轻型目录访问协议 (LDAP) 身份验证模块,允许它向 LDAP 目录验证用户。更深入地理解 MediaWiki、Apache Directory Services (ApacheDS) 和 Apache Directo...

IBMdW
2012/04/24
2.1K
1
Mac OS X Leopard与目录服务(AD/OD)集成宝典(1)

注: AD和Mac OS X集成是企业应用中实施Mac OS X需要面对的一个不可避免的问题,在原来的OS X 10.4里面集成会有比较多的麻烦,在Apple最新发布版本的10.5中有了较大的改进,而这一篇文章是Mac...

junwong
2012/03/09
0
0
关于活动目录中DNS没有SRV记录的解决方法

我们通常利用DCPROMO创建了活动目录后,在运行 Microsoft DNS 服务的服务器上安装 Active Directory 后,您可以使用“DNS 管理器 Microsoft 管理控制台 (MMC)”管理单元来确认是否为每个 DN...

技术小牛人
2017/11/09
0
0
深入理解全局编录服务器GC

在Win2003AD域环境中,除了FSMO操作主机角色外,全局编录服务器(GC)也是有着特殊含义的域控制器。通过GC,可以提高在活动目录中搜索对象的速度,可以加快用户登录验证等。 简单的说,GC是森林...

日久不生情
2017/11/21
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

sklearn学习笔记之简单线性回归

简单线性回归 线性回归是数据挖掘中的基础算法之一,从某种意义上来说,在学习函数的时候已经开始接触线性回归了,只不过那时候并没有涉及到误差项。线性回归的思想其实就是解一组方程,得到...

wangxuwei
5分钟前
0
0
feign之动态interceptor(二)

背景 上文提到了按照不同的feignClient可以根据多个不同的key来进行多个不同的bean的配置 那么我们如何完成多个interceptor的配置呢? 分析 我们刚提到多个配置的玄机就在FeignClientProper...

Mr_Qi
7分钟前
1
0
Linux Kernel 4.16 系列停止维护,用户应升级至 4.17

知名 Linux 内核维护人员兼开发人员 Greg Kroah-Hartman 近日在发布 4.16.18 版本的同时,宣布这是 4.16 系列的最后一个维护版本,强烈建议用户立即升级至 4.17 系列。 Linux 4.16 于 2018 年...

问题终结者
32分钟前
0
0
Apache配置时.htaccess失效不起作用的原因分析

.htaccess 失效的原因 1. 重写规则有问题,检查自己的重写规则 2.Apache配置问题,配置中没有配置启用 rewrite a2enmod rewrite 3.网站配置文件没有启用配置需要配置 000-default.conf <Dire...

TU-DESGIN
52分钟前
1
0
两个求最大公约数C/C++算法实现

#include<stdio.h> #include<time.h> #include <iostream>using namespace std;//求最大公约数 LCD(Largest Common Division)//短除法 //m=8251, n=6105; int LCD_ShortDiv(int m, ......

失落的艺术
58分钟前
1
0
QueryPerformanceCounter

windows的Sleep函数,睡眠线程指定毫秒数,可以用来做毫秒延时。 对于微秒延时,没有一个现成的函数,但是可以通过 QueryPerformanceFrequency QueryPerformanceCounter 来间接实现。原理就是...

开飞色
今天
1
0
log4j2使用AsyncRoot不显示行号问题处理

<AsyncRoot level="info" includeLocation="true"> <AppenderRef ref="File"/></AsyncRoot><!--1.异步logger,还需要在pom.xml中添加disruptor的依赖。2.includeLocation结合异......

小翔
今天
3
0
安卓手机上 K 歌,声音延迟怎么解决?

这篇文章可以为你提供一个解决录音和播放同步问题的思路,而且解决了声音从手机传输到耳机上有延时的问题。 初识音频 在开始之前,我先简单介绍一下音频相关的基础知识,方便下文理解。 我们...

编辑部的故事
今天
2
0
使用token实现在有效期内APP自动登录功能

使用token实现在有效期内APP自动登录功能 http://sevennight.cc/2016/07/19/auto_login_impl.html

风云海滩
今天
3
0
Spring Boot集成RabbitMQ发送接收JSON

默认情况下RabbitMQ发送的消息是转换为字节码,这里介绍一下如何发送JSON数据。 ObjectMapper 最简单发送JSON数据的方式是把对象使用ObjectMapper等JSON工具类把对象转换为JSON格式,然后发送...

小致dad
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部