import org.springframework.boot.autoconfigure.SpringBootApplication;

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
* @version V3.0
* @date 2014-12-23 下午02:07:26
* @since jdk 1.6,tomcat 6.0
*/
@SpringBootApplication
public class AdDemoApplication {

public static void main(String[] args) {
// SpringApplication.run(AdDemoApplication.class, args);
connect("192.168.250.40", "389", "testad\\qwe", "1qaz@WSX");
}

/**
* 使用java连接AD域
*
* @param host 连接AD域服务器的ip
* @param port AD域服务器的端口
* @param username 用户名
* @param password 密码
* @return void
* @author Herman.Xiong
* @date 2014-12-23 下午02:24:04
*/
public static void connect(String host, String port, String username, String password) {
DirContext ctx = null;
Hashtable<String, String> HashEnv = new Hashtable();
// LDAP访问安全级别(none,simple,strong)
HashEnv.put(Context.SECURITY_AUTHENTICATION, "simple");
//AD的用户名(需要加域名)
HashEnv.put(Context.SECURITY_PRINCIPAL, username);
//AD的密码
HashEnv.put(Context.SECURITY_CREDENTIALS, password);
// LDAP工厂类
HashEnv.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
//连接超时设置为3秒
HashEnv.put("com.sun.jndi.ldap.connect.timeout", "3000");
// 默认端口389
HashEnv.put(Context.PROVIDER_URL, "ldap://" + host + ":" + port);
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();
}
}
}
}
}

最新文章

  1. 聊一聊PV和并发
  2. SPSS数据分析—二分类Logistic回归模型
  3. 《C++primer》v5 第5章 语句 读书笔记 习题答案
  4. Unity 5.3 安装完没有Android(安卓)或IOS Module(模块)?
  5. css实现阴影效果(box-shadow)
  6. JS中的bind方法学习
  7. Hamilton回路的判定与构造
  8. 执行mount命令时找不到介质或者mount:no medium found的解决办法
  9. 2015 Multi-University Training Contest 6 Cake
  10. HelloX操作系统与中国移动OneNET物联网平台成功完成对接
  11. apple公司的潮起潮落——浪潮之巅
  12. iPhone手机VPN设置
  13. 单片机汇编语言实现DES加密算法
  14. MVC框架个人浅析
  15. SVN 右下角各种符号
  16. weiphp的学习
  17. ClientURL库-curl_setopt()
  18. 跨域问题jsonp
  19. (二) DRF 视图
  20. js页面加载完后执行(document.onreadystatechange 和 document.readyState)

热门文章

  1. 51nod1596 搬货物
  2. vue cli 平稳升级webapck4
  3. spi简介(自我理解)
  4. Bootstrap内联表单
  5. luogu P4725 多项式对数函数 (模板题、FFT、多项式求逆、求导和积分)
  6. 第二次组队赛 二分&amp;三分全场
  7. Tarjan算法求解桥和边双连通分量(附POJ 3352 Road Construction解题报告)
  8. hdu 1576扩展欧几里得算法
  9. Java&amp;amp;&amp;amp;(面试题)初始化顺序总结
  10. 通俗编程——白话NIO之Buffer