首先,您将需要设置Active Directory,以便可以运行和测试代码。

如果(像我一样)没有一台装有Windows Server的计算机,那么即使在Mac OSX上,也可以通过这种方法设置Active Directory。

您要做的第一件事是在AD中设置用户a。 确保设置用户时,他不必在首次登录时更改密码,否则您将从Java代码中收到LDAP错误。

显然,您可以更改代码以提示更改密码,但这只是需要注意的事项。

还要为您的用户创建几个组,并将它们添加到他们的个人资料中。

在下面的代码中,只有一种验证方法。 它以用户,密码和域为参数,并返回用户所属的组的列表。 如果用户不存在或密码有问题,则会引发异常。

package util;import javax.naming.Context;
import javax.naming.NamingEnumeration;
import javax.naming.NamingException;
import javax.naming.directory.*;
import java.text.MessageFormat;
import java.util.*;public class ADConnect {private static final String MEMBER_OF = "memberOf";public static List<String> authenticate(String user,String securityToken,String domain) throws NamingException {Hashtable env = new Hashtable();env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");env.put(Context.PROVIDER_URL, "LDAP://" + domain);env.put(Context.SECURITY_AUTHENTICATION, "simple");env.put(Context.SECURITY_PRINCIPAL, user + "@" + domain);env.put(Context.SECURITY_CREDENTIALS, securityToken);InitialDirContext ctx = new InitialDirContext(env);String[] dcParts = domain.split("\\.");String domainSearch = "";for (String dcPart : dcParts) {domainSearch += "DC=" + dcPart + ",";}domainSearch = domainSearch.substring(0, domainSearch.length() - 1);// Create the search controlsSearchControls searchCtls = new SearchControls();String[] attributes = new String[]{MEMBER_OF};searchCtls.setReturningAttributes(attributes);// Specify the search scopesearchCtls.setSearchScope(SearchControls.SUBTREE_SCOPE);// Search for objects using the filterNamingEnumeration result = ctx.search(domainSearch,MessageFormat.format("(SAMAccountName={0})", user), searchCtls);//Get the first resultSearchResult sr = (SearchResult) result.next();Attribute memberOf = sr.getAttributes().get(MEMBER_OF);List<String> memberOfGroups = new ArrayList<>();if (memberOf != null) {for (Enumeration e1 = memberOf.getAll(); e1.hasMoreElements(); ) {memberOfGroups.add(e1.nextElement().toString());}}return memberOfGroups;}public static void main(String[] args) throws NamingException{System.out.println(ADConnect.authenticate("user", "password", "domain"));}
}

该代码很容易解释,您可以将其用作模板来尝试为搜索添加不同的属性。

翻译自: https://www.javacodegeeks.com/2015/06/integrating-active-directory-from-java.html

从Java集成Active Directory相关推荐

  1. Nextcloud集成Active Directory(AD)LDAP用户身份验证

    1.概述 Nextcloud可以与身份管理解决方案(例如LDAP应用程序或Active Directory)集成在一起,以便LDAP或Active Directory上的用户可以出现在我们的Nextc ...

  2. Java中如何实现添加用户信息_如何通过Java客户端在Active Directory中创建新用户并将其添加到现有组...

    我是初学者,我尝试用 Java实现Active Directory客户端.到目前为止,我编写了以下代码: import java.util.Hashtable; import javax.naming ...

  3. 把Ubuntu 9.04版本的Samba 服务器加入到Active Directory中

    把Ubuntu 9.04版本的Samba 服务器加入到Active Directory中 这篇教程描述怎样在一台Ubuntu 9.04的Samba服务器中集成Active Directory,和怎样使 ...

  4. 将域控服务器添加到现有域,将域控制器添加到现有 Active Directory 域时无法选择 DNS 服务器角色...

    将域控制器添加到现有 Active Directory 域时无法选择 DNS 服务器角色 09/07/2020 本文内容 本文帮助修复了在推广 Windows Server 2008 或 Window ...

  5. java ldap操作实例_Java Spring Security示例教程中的2种设置LDAP Active Directory身份验证的方法...

    java ldap操作实例 LDAP身份验证是世界上最流行的企业应用程序身份验证机制之一,而Active Directory (Microsoft为Windows提供的LDAP实现)是另一种广泛使用的 ...

  6. Java Spring Security示例教程中的2种设置LDAP Active Directory身份验证的方法

    LDAP身份验证是全球范围内最流行的企业应用程序身份验证机制之一,而Active Directory (Microsoft针对Windows的LDAP实现)是另一种广泛使用的LDAP服务器. 在许多项 ...

  7. 使用 ADSync 集成 IBM Lotus Domino Directory 和 Microsoft Active Directory

    具有多个目录平台的企业 IT 环境非常常见,而 IBM Lotus Domino Directory 和 Microsoft Active Directory 就是这种情况下的流行选择.本文阐述了一种 ...

  8. 使用AFS, Active Directory和SSSD搭建用于集成电路设计的分布式存储系统 【十七】部署 AFS 客户端 2 统一身份登录

    使用AFS, Active Directory和SSSD搭建用于集成电路设计的分布式存储系统 [十七]部署 AFS 客户端 2 统一身份登录 Linux 统一身份登录和查询 POSIX 属性 (POS ...

  9. 使用AFS, Active Directory和SSSD搭建用于集成电路设计的分布式存储系统 【一】

    使用AFS, Active Directory和SSSD搭建用于集成电路设计的分布式存储系统 [一] 集成电路设计环境需要怎样的存储系统? 共享性 位置无关(路径透明) 安全性 可靠性 可伸缩性 易用 ...

最新文章

  1. 陈一舟:每个人风口来的时间不一样
  2. Java成员方法遵循动态绑定机制
  3. Spring5-IOC容器实现方式
  4. 100万用户服务器_我的应用在一个月内如何增长超过100万用户
  5. git 创建tag , 查看tag , 删除tag
  6. mysql cpu高 重启无效_解决mysqlcpu高的问题
  7. 大白话5分钟带你走进人工智能-第二十四节决策树系列之分裂流程和Gini系数评估(3)...
  8. 为什么我不再推荐使用MVC框架?
  9. 重构28-Rename boolean method(重命名布尔方法)
  10. 计算机网络中最常用的三种设备,计算机网络基础试卷6
  11. 鼎捷软件ERP,MES等系统构筑制造企业信息化系统
  12. App Store 隐私政策网址(URL)
  13. mysql校对集工具_mysql字符集和校对规则(Mysql校对集)
  14. 微信小程序之头像裁剪,添加字幕,生成新图片下载等 解决真机调试和开发者工具 图片不显示等问题
  15. Gson报错Invalid time zone indicator ‘ ‘
  16. 【渝粤教育】电大中专跨境电子商务理论与实务 (5)作业 题库
  17. [NOIP2002 普及组] 级数求和
  18. 自动适配跳转电脑PC端和手机WAP端
  19. 《白夜追凶》的黑客水平怎么样?终于有部国产剧没有把黑客当神了
  20. 如何更改VUE项目运行名称以及Logo图标

热门文章

  1. 最全三大框架整合(使用映射)——DeptServiceImpl.java
  2. 利用命令来打开所有程序,这个装逼给满分!
  3. docker 安装elasticsearch
  4. 猜数字游戏 : 共给玩家10次机会,若第一次就猜对了,显示‘您真是个天才’,若10也没猜对,显示“您太笨了,下次努力吧!”, 若是第2-10次猜对了,只简单的显示:“恭喜您猜对了”。
  5. java生产者实现kafka拦截器
  6. java数据库编程——执行查询操作(二)
  7. java数据库编程——Insert and Retrieve Images from MySql Table Using Java
  8. 如何下载、配置IDEA的Maven
  9. ljc.framework_Java 9模块系统(拼图)@ LJC的HackTheTower
  10. jit编译_意外分配– JIT编译抖动