使用java連線AD域,驗證賬號密碼是否正確

業餘草發表於2014-12-23
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");
	}
}

程式碼到此結束了,看看執行效果吧:

歡迎大家關注我的部落格!如有疑問,請加QQ群:135430763共同學習!

相關文章