文档章节

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

Bunnykun
 Bunnykun
发布于 2016/04/12 17:45
字数 635
阅读 1067
收藏 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
广州
程序员
私信 提问
Confluence 6 通过 SSL 连接 LDAP 和 Jira 应用等其他服务

这个页面的文档将会配置 SSL,而不是 Confluence 自己。Atlassian 将会支持 Confluence 使用这个配置,但是我们不能保证能够解决所有你在 SSL 中遇到的问题。请注意,这个页面下面提供的信息...

honeymose
08/07
0
0
译文: Spring Security 与 Active Directory LDAP 例子

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

littlebrain4solving
2017/07/27
0
0
Apache Directory Studio连接Weblogic内置LDAP

参考:Connect to WebLogic Embedded LDAP using LDAP Browser OBIEE默认使用Weblogic内置LDAP管理用户及组。 要整理已存在的用户及组,此前办法是导出安全数据,文本编辑器打开认证文件,使...

wffger
07/17
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

没有更多内容

加载失败,请刷新页面

加载更多

十万个为什么之为什么大家都说dubbo

Dubbo是什么? 使用背景 dubbo为什么这么流行, 为什么大家都这么喜欢用dubbo; 通过了解分布式开发了解到, 为适应访问量暴增,业务拆分后, 子应用部署在多台服务器上,而多台服务器通过可以通过d...

尾生
41分钟前
2
0
Docker搭建代码质量检测平台-SonarQube(中文版)

Sonar是一个用于代码质量管理的开源平台,用于管理源代码的质量,可以从七个维度检测代码质量。通过插件形式,可以支持包括java,C#,C/C++,PL/SQL,Cobol,JavaScrip,Groovy等等二十几种编程语言...

Jacktanger
47分钟前
2
0
Windows / Linux / MacOS 设置代理上网的方法汇总

本文汇总了 Windows / Linux / MacOS 设置代理上网的各种方法,总结如下: 1、设置系统代理(Windows、Linux、MacOS) 2、设置代理插件(Chrome、Chromium、Firefox、Opera、QQ等浏览器) 3、...

sunboy2050
昨天
4
0
自定义 Maven 的 repositories

有时,应用中需要一些比较新的依赖,而这些依赖并没有正式发布,还是处于milestone或者是snapshot阶段,并不能从中央仓库或者镜像站上下载到。此时,就需要 自定义Maven的<repositories>。 ...

waylau
昨天
3
0
徒手写一个es6代码库

mkdir democd demonpm initnpm install -g babelnpm install -g babel-clinpm install --save-dev babel-preset-es2015-node5 在项目目录创建两个文件夹 functional-playground ......

lilugirl
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部