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


    web项目中有时候客户要求我们使用ad域进行身份确认,不再另外做一套用户管理系统。事实上客户就是仅仅要一套账号能够訪问全部的OA。CRM等办公系统。


    这就是第三方验证。一般有AD域,Ldap,Radius,邮件server等。最经常使用的要数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域server的ip
    	 * @param post AD域server的端口
    	 * @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共同学习!


  • 相关阅读:
    bzoj 2969: 矩形粉刷 概率期望+快速幂
    loj #6191. 「美团 CodeM 复赛」配对游戏 期望dp
    CF446C DZY Loves Fibonacci Numbers 线段树 + 数学
    CF696B Puzzles 概率期望
    bzoj 3566: [SHOI2014]概率充电器 数学期望+换根dp
    loj #6342. 跳一跳 期望dp
    CF316G3 Good Substrings 广义后缀自动机
    bzoj 3829: [Poi2014]FarmCraft 树形dp+贪心
    bzoj 2131: 免费的馅饼
    CF19D Points 平衡树
  • 原文地址:https://www.cnblogs.com/zfyouxi/p/5253165.html
Copyright © 2020-2023  润新知