使用java连接AD域,验证账号密码是否正确

web项目中有时候客户要求我们使用ad域进行身份确认,不再另外做一套用户管理系统。其实客户就是只要一套账号可以访问所有的OA,CRM等办公系统。 这就是第三方验证。一般有AD域,Ldap,Radius,邮件服务器等。最常用的要数AD域了。因为window系统在国内占据了大量的江山。做起来也很方便。 我这篇文章就是写,如何用java去实现AD域的身份验证。好了,直接看代码吧:

package com.test;

import java.util.Hashtable;

import javax.naming.AuthenticationException;
import javax.naming.Context;
import javax.naming.directory.DirContext;
import javax.naming.directory.InitialDirContext;

/**
 * 使用java连接AD域,验证账号密码是否正确
 * @author Herman.Xiong
 * @date 2014-12-23 下午02:07:26
 * @version V3.0
 * @since jdk 1.6,tomcat 6.0
 */
public class AdTest {
	
	/**
	 * 使用java连接AD域
	 * @author Herman.Xiong
	 * @date 2014-12-23 下午02:24:04
	 * @return void  
	 * @throws 异常说明
	 * @param host 连接AD域服务器的ip
	 * @param post AD域服务器的端口
	 * @param username 用户名
	 * @param password 密码
	 */
	public static void connect(String host,String post,String username,String password) {
		DirContext ctx=null;
		Hashtable<String,String> HashEnv = new Hashtable<String,String>();
		HashEnv.put(Context.SECURITY_AUTHENTICATION, "simple"); // LDAP访问安全级别(none,simple,strong)
		HashEnv.put(Context.SECURITY_PRINCIPAL, username); //AD的用户名
		HashEnv.put(Context.SECURITY_CREDENTIALS, password); //AD的密码
		HashEnv.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.ldap.LdapCtxFactory"); // LDAP工厂类
		HashEnv.put("com.sun.jndi.ldap.connect.timeout", "3000");//连接超时设置为3秒
		HashEnv.put(Context.PROVIDER_URL, "ldap://" + host + ":" + post);// 默认端口389
		try {
			ctx = new InitialDirContext(HashEnv);// 初始化上下文
			System.out.println("身份验证成功!");
		} catch (AuthenticationException e) {
			System.out.println("身份验证失败!");
			e.printStackTrace();
		} catch (javax.naming.CommunicationException e) {
			System.out.println("AD域连接失败!");
			e.printStackTrace();
		} catch (Exception e) {
			System.out.println("身份验证未知异常!");
			e.printStackTrace();
		} finally{
			if(null!=ctx){
				try {
					ctx.close();
					ctx=null;
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		}
	}
	
	public static void main(String[] args) {
		AdTest.connect("10.10.2.116", "389", "herman@herman.com", "123456");
	}
}

代码到此结束了,看看运行效果吧:

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏嘉为科技的专栏

大道至简-GO语言最佳实践

2007年,受够了C++煎熬的Google首席软件工程师Rob Pike纠集Robert Griesemer和Ken Thompson两位牛人,决定创造一种新语...

20520
来自专栏黑泽君的专栏

day77_淘淘商城项目_10_ Nginx代理详解 + 单点登录系统工程搭建 + 接口文档讲解_匠心笔记

目前访问后台系统:   http://localhost:8081/ 目前访问首页系统:   http://localhost:8082/ 目前访问搜索结果页面...

24220
来自专栏小怪聊职场

安全|Java中使用JWT生成Token进行接口鉴权实现

先介绍下利用JWT进行鉴权的思路: 1、用户发起登录请求。 2、服务端创建一个加密后的JWT信息,作为Token返回。 3、在后续请求中JWT信息作为请求...

83340
来自专栏漏斗社区

专属| Dell遭受黑客攻击

日前,戴尔发布公告称:“检测并瓦解了一场针对 Dell.com 的网络攻击,未经授权的攻击者试图窃取戴尔的客户信息,但仅限于姓名、电子邮件地址、以及散列(哈希)...

13030
来自专栏Debian社区

Linux基金会宣布开放物联网ACRN管理程序

Linux基金会发布了其中一个开源项目ACRN的详细信息,这是一个专为物联网和嵌入式设备设计的管理程序。该项目得益于英特尔代码和工程的贡献,其目标是创建一个灵活...

9610
来自专栏zhisheng

《从0到1学习Flink》—— 如何自定义 Data Sink ?

前篇文章 《从0到1学习Flink》—— Data Sink 介绍 介绍了 Flink Data Sink,也介绍了 Flink 自带的 Sink,那么如何自定...

20230
来自专栏有困难要上,没有困难创造困难也要上!

修改用户ID和用户组ID

45330
来自专栏Hadoop实操

0466-CDH5.16.1和CM5.16.1的新功能

Fayson在2018年的6月15日介绍了《CDH5.15和CM5.15的新功能》,今天11月29日,Cloudera正式发布CDH5.16.1。从5.15到5...

31930
来自专栏编码前线

Android中的序列化:Parcelable和Serializable

13610
来自专栏嘉为科技的专栏

关于ITIL V3 &amp; ITIL 2011,你需要知道这些!

在 20 世纪 80 年代末期,英国商务部(OGC,Office Government Commerce)发布了 ITIL。OGC 最初的目标是通过应用 IT ...

38820

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励