从Java集成Active Directory

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

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

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

屏幕截图2015-06-12 at 15.17.16 显然,您可以更改代码以提示更改密码,但这只是需要注意的事项。

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

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/359887.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

编译 php mysql 依赖包_MySQL 5.5.15源码包编译安装

mysql果然是不愧是目前最火的数据库&#xff0c;自从mysql5.5.8之后&#xff0c;mysql的源码包编译安装都要用到cmake来进行编译了&#xff0c;编译的过程没有本质mysql果然是不愧是目前最火的数据库&#xff0c;自从mysql5.5.8之后&#xff0c;mysql的源码包编译安装都要用到c…

云计算之路-阿里云上:基于Xen的IO模型进一步分析“黑色0.1秒”问题

在发现云服务器读取OCS缓存的“黑色0.1秒”是发生在socket读取数据时&#xff0c;而且是发生在读取开始的字节&#xff0c;甚至在socket写数据时&#xff08;比如写入缓存key&#xff09;也会出现超过50ms的情况&#xff0c;我们的好奇心被激发到一个新的高度。 根据我们的实测…

Cobertura和Sonar 5.1的问题

最近&#xff0c;我有些麻烦&#xff0c;试图在我的Grails 2.4.4项目中使用Sonar 5.1。 我使用的是Groovy常用的东西&#xff1a; Gmetrics&#xff0c;Codenarc和Cobertura 。 对于Sonar数据库&#xff0c;我使用的是Postgres 9.4 。 声纳跑步者的日志文件给了我这个&#xf…

centos6.4 卸载mysql_彻底删除MYSQL-CENTOS

yum remove mysql mysql-server mysql-libs compat-mysql51rm -rf /var/lib/mysqlrm /etc/my.cnf查看是否还有mysql软件&#xff1a;rpm -qa|grep mysql有的话继续删除RPM方式安装MySQL5.6a. 检查MySQL及相关RPM包&#xff0c;是否安装&#xff0c;如果有安装&#xff0c;则移除…

ARIMA模型建模步骤

ARIMA模型建模步骤一. 绘制时序图判断序列是否有明显的趋势或周期二. 单位根检验检验方法ADFDFGLSPPKPSSERSNP前三种有有关常数与趋势项假设&#xff0c;应用不方便&#xff0c;建议少用。后三种是去除原序列趋势后进行检验&#xff0c;应用方便。原假设6种方法除KPPS外&#x…

WT2605C音频蓝牙语音芯片:单芯片实现蓝牙+MP3+BLE+电话本多功能应用

在当今的电子产品领域&#xff0c;多功能、高集成度成为了一种趋势。各种产品都需要具备多种功能&#xff0c;以满足用户多样化的需求。针对这一市场趋势&#xff0c;唯创知音推出了一款集成了蓝牙、MP3播放、BLE和电话本功能的音频蓝牙语音芯片——WT2605C&#xff0c;实现了单…

rabbitmq订单模块_RabbitMQ播放模块! 构架

rabbitmq订单模块RabbitMQ提供了具有可预测且一致的吞吐量和延迟的高可用性&#xff0c;可伸缩和便携式消息传递系统。 RabbitMQ是AMQP &#xff08;业务消息传递的开放标准&#xff09;的领先实现 &#xff0c;并且通过适配器支持XMPP&#xff0c;SMTP&#xff0c;STOMP和HTTP…

mysql as join_mysql as 别名与 join 多表连接语法

在MySQL中&#xff0c;使用AS关键字为字段、表、视图取别名&#xff0c;或者不用as&#xff0c;用空格隔开&#xff1a;SELECT (SELECT id a,title b FROM blog c limit 1)d;使用字段别名&#xff0c;可以帮助我们有效的组织查询的输出结果。---------------------------------…

'固定' table宽度,走起!

为了让表格能够填充屏幕(剩余空白区域)&#xff0c;常将其宽度属性定义为&#xff1a;100%&#xff0c;单元格也是用百分数来定义。 但这样就会出现问题&#xff1a; 如果单元格中的文本超过宽度限制&#xff0c;就会自动换行&#xff0c;高度自动增高&#xff0c;导致整个表格…

python中view的用法_APIview使用

ModelVIewSet 是对 APIView 封装ModelSerializer 是对 Serializer1.1 在user/urls.py中添加路由urlpatterns [ path(apiview/, views.UserInfoViewSet.as_view()), ]1.2 创建user/serializers.py写序列化器serializers.ModelSerializer 和 serializers.Serializer field参数…

HDU 1597 find the nth digit (二分查找)

二分查找 1 #include<stdio.h>2 __int64 a[65555];3 void init()4 {5 a[0]0;6 for(int i1;i<65537;i)7 {8 a[i]a[i-1]i;9 } 10 } 11 int search(int n,int low,int high) 12 { 13 int temp(lowhigh)/2; 14 if(na[temp]) return temp-…

java 注解应用技巧_改善Java应用程序性能的快速技巧

java 注解应用技巧曾经遇到过性能问题吗&#xff1f; 我也是。 如果我的经理再喊一次“ faaaaster”&#xff0c;我一生都会有听力障碍。 顺便说一句&#xff0c;我能听到所有噪音中的德语发音吗&#xff1f; ;-) 您可以相信仍然有人无知地在谈论垃圾收集器&#xff08;得到它吗…

字符串系列函数(不断跟新)

1.sprintf,sprintf_s sprintf(char* buffer, const char* format, [argument]); vs下需要加上_CRT_SECURE_NO_WARNINGS #include <iostream> using namespace std; int main() {char name[1];int input 9099;sprintf(name,"%d", input);system("pause&qu…

python获取指定区域的像素_如何获得某个区域的像素值?

因此&#xff0c;由于我对编程比较陌生&#xff0c;所以我需要一些帮助来解决这个问题。我在Windows计算机上使用SimpleCV和python2.7。我要做的是让一个(自写)程序告诉我沿着一条预设线的像素值&#xff0c;这里最重要的是每个像素的颜色。在我真的不知道从哪里开始&#xff0…

Windows 键盘操作快捷方式积累

复制、粘贴&#xff1a; CTRLC 复制被选择的项目到剪贴板 CTRLV 粘贴剪贴板中的内容到当前位置 CTRLX 剪切被选择的项目到剪贴板 Alt space E P CMD 窗口…

step7db块寻址_step7中的难点:间接寻址示例,中文详细注释。

step7中的难点&#xff1a;间接寻址示例&#xff0c;中文详细注释。推荐欢迎纠错&#xff0c;防止误导。FUNCTION "DBtoDB" : VOID //该功能块的作用是把一个数据块中的指定的一批数据&#xff0c;复制到另一个块的指定位置。TITLE //标题&#xf…

spring mvc 教程_Spring MVC开发–快速教程

spring mvc 教程这是我们的JCG合作伙伴之一&#xff0c;来自Manoj的有关使用Spring开发Web应用程序的简短教程&#xff0c; 网址为“ The Khangaonkar Report ”。 &#xff08;注意&#xff1a;对原始帖子进行了少量编辑以提高可读性&#xff09; Spring MVC使用基于模型视图…

今天才知道css hack是什么

先来个冷笑话&#xff1a;一晚下班回家&#xff0c;一民警迎面巡逻而来。突然对我大喊&#xff1a;站住&#xff01; 民警&#xff1a;int类型占几个字节? 我&#xff1a;4个。 民警&#xff1a;你可以走了。 我感到很诧异。 我&#xff1a;为什么问这样的问题&#xff1f; 民…

汇智创科机器人_【汇智创科机器人招聘信息】-看准网

在单位去学校参加双选会时投的简历&#xff0c;当时就发了一个面试邀请&#xff0c;约的是10点&#xff0c;如果有人接到面试通知&#xff0c;最好早点去&#xff0c;如果十点去&#xff0c;早上弄不完&#xff0c;下午还要接着&#xff0c;很花时间。去了之后&#xff0c;给我…

java跳转_java servlet 几种页面跳转的方法

Servlet&#xff1a;当然&#xff0c;在servlet中&#xff0c;一般跳转都发生在doGet, doPost等方法里面。1) redirect 方式response.sendRedirect("/a.jsp");页面的路径是相对路径。sendRedirect可以将页面跳转到任何页面&#xff0c;不一定局限于本web应用中&#…