JAVA_基本LDAP操作实例

一、简介

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("============"); 
        } 
    }

(0)

相关推荐

  • JAVA_基本LDAP操作实例

    一.简介 Lightweight Directory Access Protocol (LDAP),轻型目录访问协议是一个访问在线目录服务的协议.下面的例子中简单介绍在java中队ldap的增删该查功能.目录结构为: CD=CAS,DC=MYDC --cn=users ----uid=zhangsan 二.示例1.通过LdapContext连接ldap 复制代码 代码如下: /**  * 连接LDAP  */  @SuppressWarnings({ "rawtypes", "

  • JDBC中resutset接口操作实例详解

    本文主要向大家展示JDBC接口中resutset接口的用法实例,下面我们看看具体内容. 1. ResultSet细节1 功能:封锁结果集数据 操作:如何获得(取出)结果 package com.sjx.a; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; import org.junit.Test; //1. next方

  • Angularjs cookie 操作实例详解

    摘要 现在很多app采用内嵌h5的方式进行开发,有些数据会存在webveiw的cookie中,那么如果使用angularjs开发单页应用,就需要用到angularjs的cookie操作.这里提供一个简单的学习demo.方便快速上手. 一个例子 <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml" ng-app="myapp"> <head> <meta http

  • MongoDB快速入门笔记(四)之MongoDB查询文档操作实例代码

    MongoDB简介 MongoDB 是一个基于分布式文件存储的数据库.由 C++ 语言编写.旨在为 WEB 应用提供可扩展的高性能数据存储解决方案. MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的. 下面给大家介绍MongoDB查询文档操作的实例 先把student删除,再重新插入数据 > db.student.drop() true > db.student.insert([{ "_id" : 1, "

  • IOS中各种手势操作实例代码

    先看下效果 手势相关的介绍 IOS中手势操作一般是 UIGestureRecognizer 类的几个手势子类去实现,一般我们用到的手势就这么5种: 1.点击  UITapGestureRecognizer 2.平移  UIPanGestureRecognizer 3.缩放  UIPinchGestureRecognizer 4.旋转  UIRotationGestureRecognizer 5.轻扫  UISwipeGestureRecognizer 我们上面这个实例中就用到了上面这5种手势,不

  • js链表操作(实例讲解)

    如下所示: <!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <script> function Node(v){ this.value=v; this.next=null; } function ArrayList(){ this.head=new Node(

  • PHP中遍历二维数组_以不同形式的输出操作实例

    如下所示: <body> <?php //定义二维索引数组 $arr = array( array("101","李军","男","1976-02-20","95033"), array("103","陆君","男","1974-06-03","95031"), array("10

  • PHP数组的基本操作及遍历数组的经典操作实例

    实例如下所示: <?php 索引数组 //数组第一种定义 $arr = array(1,2,3); var_dump($arr); //数组第二种定义 $arr = [1,2,3]; var_dump($arr); //数组第三种定义 $arr[0] = 7; $arr[1] = "hello"; var_dump($arr); echo $arr[2];//取值 关联数组 $arr = array("name"=>"小李",&quo

  • Django中的cookie与session操作实例代码

    添加cookie: def login(req): if req.method=="POST": uf = UserInfoForm(req.POST) if uf.is_valid(): username = uf.cleaned_data["username"] password = uf.cleaned_data["password"] print username,password users = UserInfo.objects.fil

  • Redis使用Eval多个键值自增的操作实例

    在PHP上使用Redis 给多个键值进行自增,示例如下: $set['money'] = $this->redis->hIncrByFloat($key, $hour .'_money', $data['money']); $set['ip'] = $this->redis->hIncrBy($key, $hour .'_ip', $data['ip']); $set['uv'] = $this->redis->hIncrBy($key, $hour .'_uv', $

随机推荐