java 访问活动目录代码

package demo;

import java.util.Hashtable;

import javax.naming.Context;
import javax.naming.NamingEnumeration;
import javax.naming.NamingException;
import javax.naming.directory.Attribute;
import javax.naming.directory.Attributes;
import javax.naming.directory.SearchControls;
import javax.naming.directory.SearchResult;
import javax.naming.ldap.InitialLdapContext;
import javax.naming.ldap.LdapContext;

public class ADOperTest {

    public void GetADInfo(boolean isUser) {
        String host = "192.168.1.188"; // AD服务器
        String port = "389"; // 端口
        String url = new String("ldap://" + host + ":" + port);
        Hashtable HashEnv = new Hashtable();
        String adminName = "[email protected]"; // 注意用户名的写法:domain\User
        String adminPassword = "2015"; // 密码
        HashEnv.put(Context.SECURITY_AUTHENTICATION, "simple"); // LDAP访问安全级别
        HashEnv.put(Context.SECURITY_PRINCIPAL, adminName); // AD User
        HashEnv.put(Context.SECURITY_CREDENTIALS, adminPassword); // AD Password
        HashEnv.put(Context.INITIAL_CONTEXT_FACTORY,
                "com.sun.jndi.ldap.LdapCtxFactory"); // LDAP工厂类
        HashEnv.put(Context.PROVIDER_URL, url);
        try {
            LdapContext ctx = new InitialLdapContext(HashEnv, null);
            // 域节点
            String searchBase = "OU=广州日报集团,DC=gzrb,DC=local";
            // LDAP搜索过滤器类
            String searchFilter = isUser ? "(&(objectClass=user))"
                    : "(&(objectClass=organizationalUnit))";
            // 搜索控制器
            SearchControls searchCtls = new SearchControls(); // Create the
            // 创建搜索控制器
            searchCtls.setSearchScope(SearchControls.SUBTREE_SCOPE); // Specify
            // 定制返回属性
            String[] returnedAtts = null;
            if (isUser) {
                returnedAtts = new String[] { "sAMAccountName",
                        "distinguishedName", "name" };
            } else {
                returnedAtts = new String[] { "ou", "distinguishedName", "name" };
            }
            searchCtls.setReturningAttributes(returnedAtts); // 设置返回属性集
            // 根据设置的域节点、过滤器类和搜索控制器搜索LDAP得到结果
            NamingEnumeration answer = ctx.search(searchBase, searchFilter,
                    searchCtls);// Search for objects using the filter
            while (answer.hasMoreElements()) {// 遍历结果集
                SearchResult sr = (SearchResult) answer.next();// 得到符合搜索条件的DN
                String dn = sr.getAttributes().get("distinguishedName").get()
                        .toString();
                System.out.println(dn);
                Attributes Attrs = sr.getAttributes();// 得到符合条件的属性集
                if (Attrs != null) {
                    try {
                        for (NamingEnumeration ne = Attrs.getAll(); ne
                                .hasMore();) {
                            Attribute Attr = (Attribute) ne.next();// 得到下一个属性
                            System.out.print(" 属性名:" + Attr.getID().toString());
                            // 读取属性值
                            for (NamingEnumeration e = Attr.getAll(); e
                                    .hasMore();) {
                                String val = e.next().toString();
                                System.out.println("   属性值:" + val);
                            }

                        }
                    } catch (NamingException e) {
                        System.err.println("Throw Exception : " + e);
                    }
                }// if
            }
            ctx.close();
        } catch (NamingException e) {
            e.printStackTrace();
            System.err.println("Throw Exception : " + e);
        }

    }

    public void login() {

        String userName = "[email protected]"; // 用户名称
        String password = "2015"; // 密码
        String host = "192.168.1.188"; // AD服务器
        String port = "389"; // 端口
        String domain = "@hotent.local"; // 邮箱的后缀名
        String url = new String("ldap://" + host + ":" + port);
        String user = userName.indexOf(domain) > 0 ? userName : userName
                + domain;
        Hashtable env = new Hashtable();

        LdapContext ctx = null;
        env.put(Context.SECURITY_AUTHENTICATION, "simple");
        env.put(Context.SECURITY_PRINCIPAL, user); // 不带邮箱后缀名的话,会报错,具体原因还未探究。高手可以解释分享。
        env.put(Context.SECURITY_CREDENTIALS, password);
        env.put(Context.INITIAL_CONTEXT_FACTORY,
                "com.sun.jndi.ldap.LdapCtxFactory");
        env.put(Context.PROVIDER_URL, url);
        try {
            ctx = new InitialLdapContext(env, null);
            ctx.close();
            System.out.println("验证成功!");
        } catch (NamingException err) {
            err.printStackTrace();
            System.out.println("验证失败!");
        }
    }

    public static void main(String args[]) {
        // 实例化
        ADOperTest ad = new ADOperTest();
        ad.GetADInfo(true);
//        System.out.println("---------组织---------");
//        ad.GetADInfo(false);
        ad.login();
    }
}

这样遍历系统中的用户,组织,和登录。

时间: 2024-10-10 06:50:44

java 访问活动目录代码的相关文章

java访问ad域

1.活动目录(AD) Active Directory 是用于 Windows Server 的目录服务.它存储着网络上各种对象的有关信息,并使该信息易于管理员和用户查找及使用.Active Directory 目录服务使用结构化的数据存储作为目录信息的逻辑层次结构的基础. 通过登录验证以及目录中对象的访问控制,将安全性集成到 Active Directory 中. 目录服务,如 Active Directory,提供了用于存储目录数据并使该数据可由网络用户和管理员使用的方法.例如,Active

java移动文件夹、 慎用java file.renameTo(f)方法 、 java从一个目录复制文件到另一个目录下 、 java代码完成删除文件、文件夹 、

java移动文件夹(包含子文件和子文件夹): http://blog.csdn.net/yongh701/article/details/45070353 慎用java    file.renameTo(f)方法: http://www.cnblogs.com/mrwangblog/p/3934506.html 注意看结果,从C盘到E盘失败了,从C盘到D盘成功了.因为我的电脑C.D两个盘是NTFS格式的,而E盘是FAT32格式的.所以从C到E就是上面文章所说的"file systems"

Java访问网络url,获取网页的html代码

在Java中,Java.net包里面的类是进行网络编程的,其中,java.net.URL类和java.net.URLConection类是编程者方便地利用URL在Internet上进行网络通信.有两种方法可以用来访问Internet. 一是使用URL类的openStream()方法: openStream()方法与制定的URL建立连接并返回InputStream类的对象,以从这一连接中读取数据: openStream()方法只能读取网络资源. 二是使用URL类的openConnection()方

Java访问权限控制

访问权限控制   java提供了访问权限修饰词,以供类库开发人员向客户端程序员指明哪些是可用的,哪些是不可用的.访问权限控制的等级,从最大权限到最小权限依次是:public.protected.包访问权限(没有关键字).private. 包:库单元 包内有一组类,它们在单一名字空间之下被组织在了一起.如果你向导入某个标准库中的类的话,可以使用import关键字.我们之所以要导入,就是要提供一个管理名字空间的机制.所有类成员的名称都是彼此分离的.所以具有相同方法的不同类在程序运行时不会出现错误的.

Java命名和目录接口——JNDI

JNDI即Java命名和目录接口(JavaNaming and Directory Interface),它属于J2EE规范范畴,是J2EE的核心技术之一,提供了一组接口.类和关于命名空间的概念.JDNI是provider-based技术,它暴露一个API和一个服务供应接口(SPI).它将名称和对象联系起来,使我们可以用名称访问对象.我们可以把JNDI简单地看成是里面封装了一个name到实体对象的映射,通过字符串可以方便得到想要的对象资源,例如JDBC.JMail.JMS.EJB等.这意味着任何

android访问asset目录下的资源

android提供了AssetManager来访问asset目录下的资源, 在activity中通过getAssets()获取AssetManager 常用的api如下: 1.列举路径下的资源String[] list(String path) 2.InputStream open(asset目录下的资源路径) 下面是放问asset目录下的图片的代码 package com.example.qunzheng.customerview; import android.app.Activity; i

01 安装apache php配置 时区 环境变量 安装mysql 虚拟主机 文件夹访问权限 目录别名

php介绍 简介与历史 应用领域: php运行环境 php语言运行原理 安装apache: PHP的命令行运行模式(独立运行): 配置apache以运行php网页 配置php的基本运行环境 确定php配置文件(php.ini)的位置: 配置时区: 设置环境变量 检测apache配置文件语法 配置数据库连接机制 安装mysql数据库 虚拟主机配置 端口监听: 主机配置关键项 配置文件夹访问权限 主机别名设置 文件夹访问控制的文件控制方式 目录别名设置Alias 多站点配置: php介绍 简介与历史

访问webapp目录报404错误

spring boot打包后,访问webapp目录报了404.并且java包中没有前端代码 解决办法: 1. 配置pom.xml <build> <resources> <resource> <directory>src/main/webapp</directory> <!--注意此次必须要放在此目录下才能被访问到 --> <targetPath>META-INF/resources</targetPath>

java学习教程之代码块

学编程吧java学习教程之代码块发布了,欢迎通过xuebiancheng8.com来访问 java中的代码块包括下面几种: 1.普通代码块 2.构造代码块 3.静态代码块 1.普通代码块很简单看下面这个例子: public class Test{ public static void main(String args[]){ { //此处就是普通代码块,普通代码块中的代码按顺序执行 System.out.println("hello"); } } } 2.构造代码块 public cl