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 */@SpringBootApplicationpublic 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(); } } } }}