java调用AD域验证用户,搜索用户信息

java调用AD域验证用户

  • 一、AD域简介
  • 二、LDAP简介
  • 三、java调用AD域验证用户

在工作中,需要利用JAVA调用AD域验证用户。查询了许多资料后,希望这篇文章对也在学习这方面知识的同学有所帮助。

一、AD域简介

AD的全称是Active Directory:活动目录
域(Domain):
1)域是Windows网络中独立运行的单位,域之间相互访问则需要建立信任关系(即Trust Relation)。信任关系是连接在域与域之间的桥梁。当一个域与其他域建立了信任关系后
2)两个域之间不但可以按需要相互进行管理,还可以跨网分配文件和打印机等设备资源,使不同的域之间实现网络资源的共享与管理,以及相互通信和数据传输。

所以使用AD域主要是为了方便于集中式管理。如果没有引入域的概念,那么公司系统管理员可能要进行大量的重复式工作,对每一台电脑进行配置权限等。当我们使用了域之后,系统管理员只需要在域控制器上进行一次设置就可以配置所有电脑了。

当然,引入域之后,计算机用户的权限会大大降低,因为系统管理员可以对用户权限进行设置,例如下载的软件、登录的网址,对于公司而言,这样可以提高员工工作效率,有利于提高公司业绩。(不然呢?想象QQ、微信都不能用了,谁还上班摸鱼啊-。-)

二、LDAP简介

LDAP是轻量目录访问协议,英文全称是Lightweight Directory Access Protocol,一般都简称为LDAP。

LDAP的主要作用就是实现单点登录,在同一个域内,使用一套用户名和密码可以登录多个系统,减少用户使用难度,降低开发成本和对接成本。由于现在市场上大多数产品已经支持LDAP,所以开发难度大大降低。

三、java调用AD域验证用户

import java.util.Hashtable;

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


public class getADInfo {
    public static void main(String[] args) {
        String userName = "XXXXX";//AD域认证,UserName,改成自己的用户名
        String password = "XXXXX";//AD域认证,PassWord,改成自己的密码
        String host = "XXXXX";//AD域IP,必须填写正确 用户名和密码所在域
        String port = "389"; //端口,一般默认389
        connect(host, port, userName, password);
    }

    /**
     * 使用java连接AD域
     * @return void
     * @throws 异常说明
     * @param host 连接AD域服务器的ip
     * @param port AD域服务器的端口
     * @param username 用户名
     * @param password 密码
     */
    public static void connect(String host, String port, 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 + ":" + port);// 默认端口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();
                }
            }
        }
    }
}

你可能感兴趣的:(ad域)