JAVA_基本LDAP操作实例_java

一、简介

Lightweight Directory Access Protocol (LDAP),轻型目录访问协议是一个访问在线目录服务的协议。下面的例子中简单介绍在java中队ldap的增删该查功能。目录结构为:

CD=CAS,DC=MYDC

--cn=users

----uid=zhangsan

二、示例
1、通过LdapContext连接ldap

复制代码 代码如下:

/**
 * 连接LDAP
 */ 
@SuppressWarnings({ "rawtypes", "unchecked" }) 
public LdapContext connetLDAP() throws NamingException { 
    // 连接Ldap需要的信息 
    String ldapFactory = "com.sun.jndi.ldap.LdapCtxFactory"; 
    String ldapUrl = "ldap:/IP:port";// url 
    String ldapAccount = "cn=root"; // 用户名 
    String ldapPwd = "password";//密码 
    Hashtable env = new Hashtable(); 
    env.put(Context.INITIAL_CONTEXT_FACTORY, ldapFactory); 
    // LDAP server 
    env.put(Context.PROVIDER_URL, ldapUrl); 
    env.put(Context.SECURITY_AUTHENTICATION, "simple"); 
    env.put(Context.SECURITY_PRINCIPAL, ldapAccount); 
    env.put(Context.SECURITY_CREDENTIALS, ldapPwd); 
    env.put("java.naming.referral", "follow"); 
    LdapContext ctxTDS = new InitialLdapContext(env, null); 
    return ctxTDS; 

2、增加用户zhangsan

复制代码 代码如下:

 
// 添加 
    public void testAdd() throws Exception { 
        LdapContext ctx = connetLDAP(); 
        Attributes attrs = new BasicAttributes(true); 
        Attribute objclass = new BasicAttribute("objectclass"); 
        // 添加ObjectClass 
        String[] attrObjectClassPerson = { "inetOrgPerson", "organizationalPerson", "person", "top" }; 
        Arrays.sort(attrObjectClassPerson); 
        for (String ocp : attrObjectClassPerson) { 
            objclass.add(ocp); 
        } 
        attrs.put(objclass); 
        String uid = "zhangsan"; 
        String userDN = "uid=" + uid + "," + "cn=users,dc=cas,dc=mydc"; 
        // 密码处理 
        // attrs.put("uid", uid); 
        attrs.put("cn", uid); 
        attrs.put("sn", uid); 
        attrs.put("displayName", "张三"); 
        attrs.put("mail", "abc@163.com"); 
        attrs.put("description", ""); 
        attrs.put("userPassword", "Passw0rd".getBytes("UTF-8")); 
        ctx.createSubcontext(userDN, attrs); 
    } 

3、删除用户zhangsan

复制代码 代码如下:

//删除 
    public void testRemove() throws Exception { 
        LdapContext ctx = connetLDAP(); 
        String uid = "zhangsan"; 
        String userDN = "uid=" + uid + "," + "cn=users,dc=cas,dc=mydc"; 
        ctx.destroySubcontext(userDN); 

    } 

4、修改zhangsan的邮件地址

复制代码 代码如下:

 
//修改 
    public boolean testModify() throws Exception { 
        boolean result = true; 
        LdapContext ctx = connetLDAP(); 
        String uid = "zhangsan"; 
        String userDN = "uid=" + uid + "," + "cn=users,dc=cas,dc=mydc"; 
        Attributes attrs = new BasicAttributes(true); 
        attrs.put("mail", "zhangsan@163.com"); 
        ctx.modifyAttributes(userDN, DirContext.REPLACE_ATTRIBUTE, attrs); 
        return result; 

    } 

5、查找用户

复制代码 代码如下:

//查询 
    public void testSearch() throws Exception { 
        LdapContext ctx = connetLDAP(); 
        // 设置过滤条件 
        String uid = "zhangsan"; 
        String filter = "(&(objectClass=top)(objectClass=organizationalPerson)(uid=" + uid + "))"; 
        // 限制要查询的字段内容 
        String[] attrPersonArray = { "uid", "userPassword", "displayName", "cn", "sn", "mail", "description" }; 
        SearchControls searchControls = new SearchControls(); 
        searchControls.setSearchScope(SearchControls.SUBTREE_SCOPE); 
        // 设置将被返回的Attribute 
        searchControls.setReturningAttributes(attrPersonArray); 
        // 三个参数分别为: 
        // 上下文; 
        // 要搜索的属性,如果为空或 null,则返回目标上下文中的所有对象; 
        // 控制搜索的搜索控件,如果为 null,则使用默认的搜索控件 
        NamingEnumeration<SearchResult> answer = ctx.search("cn=users,dc=cas,dc=mydc", filter.toString(), searchControls); 
        // 输出查到的数据 
        while (answer.hasMore()) { 
            SearchResult result = answer.next(); 
            NamingEnumeration<? extends Attribute> attrs = result.getAttributes().getAll(); 
            while (attrs.hasMore()) { 
                Attribute attr = attrs.next(); 
                System.out.println(attr.getID() + "=" + attr.get()); 
            } 
            System.out.println("============"); 
        } 
    } 

时间: 2024-09-20 23:15:59

JAVA_基本LDAP操作实例_java的相关文章

Java对时间的简单操作实例_java

本文实例讲述了Java对时间的简单操作方法.分享给大家供大家参考.具体分析如下: 这里所用的Date指的是java.util.Date. ps:使用java操作时间感觉真真蛋疼,还是我大C#舒服,一个DateTime全部搞定 获取当前时间: 复制代码 代码如下: // 创建一个当前时间的Date对象 Date time = new Date(); 蛋疼的地方,对时间增.减操作: 复制代码 代码如下: // 使用Calendar类对时间增.减操作 Calendar c = Calendar.get

Java实现用Mysql存取图片操作实例_java

1.MySQL中的BLOB类型 Mysql中可以存储大文件数据,一般使用的BLOB对象.如图片,视频等等. BLOB是一个二进制大对象,可以容纳可变数量的数据.因为是二进制对象,所以与编码方式无关.有4种BLOB类型:TINYBLOB.BLOB.MEDIUMBLOB和LONGBLOB.它们只是可容纳值的最大长度不同. 四种字段类型保存的最大长度如下: 复制代码 代码如下: TINYBLOB - 255 bytes BLOB - 65535 bytes(64KB) MEDIUMBLOB - 16,

Mybatis中的resultType和resultMap查询操作实例详解_java

resultType和resultMap只能有一个成立,resultType是直接表示返回类型的,而resultMap则是对外部ResultMap的引用,resultMap解决复杂查询是的映射问题.比如:列名和对象属性名不一致时可以使用resultMap来配置:还有查询的对象中包含其他的对象等. MyBatisConfig.xml <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configura

java序列化与反序列化操作实例分析_java

本文实例分析了java序列化与反序列化操作.分享给大家供大家参考,具体如下: 概述: Java序列化是指把Java对象转换为字节序列的过程;而Java反序列化是指把字节序列恢复为Java对象的过程. 示例代码: import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.i

VEGAS 5.0 音频新手入门——录音的软件操作实例

第四课 录音的软件操作实例 录音对系统配置及操作系统的基本要求:支持win98以上的所有操作系统,DX8.1上,推荐DX9.0B,内存当然越大越好,128MB的内存推荐使用win98,256MB内存以上推荐使用winxp,CPU当然是越快越好,挂DX插件多的话系统资源耗的少些,一般现在的主流或者稍落伍的电脑都没问题,硬盘当然是越大越好,最好是7200转的,在多轨混音时可以跑更多的轨,系统的DMA通道一定要打开(inter系列和SII系列的主板安装它的应用增强程序自动打开,VIA系列的主板安装4I

VEGAS 5.0 音频新手入门——录音的硬件操作实例

第三课 录音的硬件操作实例 下面主要是介绍录音的硬件使用和操作方法: 1.处理录音环境,保证安静和隔音(最好能做吸音处理,但是业余条件不好,这个有点难,我也没法做到,呵呵). 2.将话筒固定到话筒架,一定要安放稳当,以免震动造成杂音.当然,有条件能支一个防噗罩(阻挡歌手气流的噗噗声)更好了. 3.连接话筒到前置放大器,如果使用的是专业的话放或者调音台的话放,建议用卡龙接口线(大三芯)平衡接法连接,这样信号质量更加稳定,因连线接触问题影响质量的因素要小些. 4.连接前置放大器的输出到声卡的线性输入

Oracle 9i中的一个闪回查询操作实例

在利用闪回功能前需要确认: 1.用户有对dbms_flashback包有执行权限! 2.进行闪回查询必须设置自动回滚段管理,在init.ora设置参数UNDO_MANAGEMENT=AUTO,参数UNDO_RETENTION=n,决定了能往前闪回的最大时间,值越大就需要越多Undo空间. Oracle 9i中闪回查询操作实例 查看Oracle中Delete和Commit操作的流程分析 例:Oracle 9i的Flashback Query操作. (1)创建闪回查询用户 SQL> create u

Python多线程和队列操作实例

  这篇文章主要介绍了Python多线程和队列操作实例,本文直接给给实例代码,需要的朋友可以参考下 Python3,开一个线程,间隔1秒把一个递增的数字写入队列,再开一个线程,从队列中取出数字并打印到终端 代码如下: #! /usr/bin/env python3 import time import threading import queue # 一个线程,间隔一定的时间,把一个递增的数字写入队列 # 生产者 class Producer(threading.Thread): def __i

Shell脚本检查IP格式及mysql操作实例

  这篇文章主要介绍了Shell脚本检查IP格式及mysql操作实例,本文直接给出脚本代码,需要的朋友可以参考下 还是cronjob的一部分,就是在Rails的定时任务里,后台交互运行 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 CheckIPAddress() { e