文档章节

java对openldap执行crud操作

chaun
 chaun
发布于 2015/04/02 11:43
字数 633
阅读 17
收藏 0
import javax.naming.NamingException;

public interface Ldap {
 public void connect() throws NamingException;
 public void search() throws NamingException;
 public void update() throws NamingException;
 public void add() throws NamingException;
 public void delete() throws NamingException;
 public void close() throws NamingException;
}
 
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.BasicAttribute;
import javax.naming.directory.BasicAttributes;
import javax.naming.directory.DirContext;
import javax.naming.directory.InitialDirContext;
import javax.naming.directory.ModificationItem;
import javax.naming.directory.SearchControls;
import javax.naming.directory.SearchResult;
public class LdapImpl implements Ldap {
 private DirContext ds;
 @Override
 public void search() throws NamingException {
  System.out.println("Searching...");
  SearchControls searchCtls = new SearchControls();
  // Specify the search scope
  searchCtls.setSearchScope(SearchControls.SUBTREE_SCOPE);
  // specify the LDAP search filter
  String searchFilter = "uid=test";
  // Specify the Base for the search
  //String searchBase = "dc=ibm,dc=com";
  String searchBase = "o=tcl,c=cn";
  
  // Specify the attributes to return
  String returnedAtts[] = { "cn"};
  //可以查找多个属性
  //String returnedAtts[] = { "cn","mail","userPassword","sn" };
  
  searchCtls.setReturningAttributes(returnedAtts);
  // Search for objects using the filter
  NamingEnumeration<SearchResult> entries = ds.search(searchBase,
    searchFilter, searchCtls);
  // Loop through the search results
  while (entries.hasMoreElements()) {
   SearchResult entry = entries.next();
   System.out.println(">>>" + entry.getName());
   // Print out the groups
   Attributes attrs = entry.getAttributes();
   if (attrs != null) {
    for (NamingEnumeration<? extends Attribute> names = attrs
      .getAll(); names.hasMore();) {
     Attribute attr = names.next();
     System.out.println("AttributeID: " + attr.getID());
     for (NamingEnumeration<?> e = attr.getAll(); e.hasMore();) {
      System.out.println("Attributes:" + e.next());
     }
    }
   }
  }
  System.out.println("Search complete.");
 }
 @Override
 public void update() throws NamingException {
  System.out.println("Updating...");
   ModificationItem[] mods = new ModificationItem[1];
         Attribute attr = new BasicAttribute("cn", "changed value");
         
         // Support add, replace and remove an attribute.
         mods[0] = new ModificationItem(DirContext.REPLACE_ATTRIBUTE, attr);
//         ds.modifyAttributes("uid=test,ou=tester,dc=ibm,dc=com", mods);
         ds.modifyAttributes("uid=test, o=tcl,c=cn", mods);
         
         System.out.println("Updated.");
 }
 @Override
 public void add() throws NamingException {
  System.out.println("Adding...");
  Attributes attrs = new BasicAttributes();
  attrs.put("uid", "test");
  attrs.put("sn", "test");
  attrs.put("cn", "test test");
  attrs.put("userPassword", "111111".getBytes());
  attrs.put("mail", "test@126.com");
  attrs.put("labeledURI", "http://unmi.blogcn.com");
  
  // the following attribute has two values
  Attribute objclass = new BasicAttribute("objectClass");
  objclass.add("inetOrgPerson");
  attrs.put(objclass);
  //this.ds.createSubcontext("uid=test,ou=tester,dc=ibm,dc=com", attrs);
  this.ds.createSubcontext("uid=test, o=tcl,c=cn", attrs);
  System.out.println("Add complete.");
 }
 @Override
 public void delete() throws NamingException {
  System.out.println("Deleting...");
  //this.ds.destroySubcontext("uid=test,ou=tester,dc=ibm,dc=com");
  this.ds.destroySubcontext("uid=test,o=tcl,c=cn");
  System.out.println("Deleted.");
 }
 @Override
 public synchronized void connect() throws NamingException {
  System.out.println("connecting...");
  if (ds == null) {
   Hashtable<String, Object> env = new Hashtable<String, Object>(11);
   env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
   env.put(Context.PROVIDER_URL, "ldap://localhost:389");
   env.put(Context.SECURITY_AUTHENTICATION, "simple");
   //env.put(Context.SECURITY_PRINCIPAL, "cn=Manager,dc=ibm,dc=com");
   env.put(Context.SECURITY_PRINCIPAL,  "cn=Manager,o=tcl,c=cn" ); 
   
   env.put(Context.SECURITY_CREDENTIALS, "secret");
   ds = new InitialDirContext(env);
   // ds = (DirContext) initial.lookup("ldap://localhost:389");
  }
  System.out.println("connected.");
 }
 @Override
 public void close() throws NamingException {
  System.out.println("closing...");
  ds.close();
  System.out.println("closed.");
 }
}
 
public class Factory {
 private static Ldap instance;
 public synchronized static Ldap createInstance() {
  if (instance == null) {
   try {
    instance = (Ldap) Class.forName("com.leech.ldap.LdapImpl").newInstance();
   } catch (Exception e) {
    throw new RuntimeException(e);
   } 
  }
  return instance;
 }
}
 
import java.util.Hashtable;
import javax.naming.Context;
import javax.naming.NamingException;
import javax.naming.directory.DirContext;
import javax.naming.directory.InitialDirContext;
public class LDAPTest {
 /**
  * @param args
  */
 public static void main(String[] args) {
  try {
   test2();
  } catch (NamingException e) {
   e.printStackTrace();
  }
 }
 
 public static void test1(){
  LDAPTest LDAPTest1 =  new  LDAPTest();   
     String root =  "o=tcl,c=cn" ;  //root   
     Hashtable env =  new  Hashtable();   
     env.put(Context.INITIAL_CONTEXT_FACTORY,  "com.sun.jndi.ldap.LdapCtxFactory" );   
     env.put(Context.PROVIDER_URL,  "ldap://localhost/"  + root);       
     env.put(Context.SECURITY_AUTHENTICATION,  "simple" );   
     env.put(Context.SECURITY_PRINCIPAL,  "cn=Manager,o=tcl,c=cn" );   
     env.put(Context.SECURITY_CREDENTIALS,  "secret" );   
     DirContext ctx =  null ;   
      try  {   
       ctx =  new  InitialDirContext(env);   
       System.out.println( "认证成功" );   
     }   
      catch  (javax.naming.AuthenticationException e) {   
       e.printStackTrace();   
       System.out.println( "认证失败" );   
     }   
      catch  (Exception e) {   
       System.out.println( "认证出错:" );   
       e.printStackTrace();   
     }  
      if  (ctx !=  null ) {   
        try  {   
         ctx.close();   
       }   
        catch  (NamingException e) {   
          //ignore   
       }   
     }  
 }
 
 public static void test2()throws NamingException  {
  Ldap ldap = Factory.createInstance();
  
  ldap.connect();
  try {
   // add uid=test,ou=tester,dc=ibm,dc=com
   ldap.add();
   
   // search uid=test
      //ldap.search();
      
      // update cn with new value of "changed name"
      //ldap.update();
      
      // search uid=test to see cn value.
      //ldap.search();
      // delete uid=test,ou=tester,dc=ibm,dc=com
      //ldap.delete();
      
      // search again.
      ldap.search();
  } finally {
   ldap.close();
  }
 }
}


© 著作权归作者所有

共有 人打赏支持
chaun
粉丝 91
博文 269
码字总数 91059
作品 0
深圳
高级程序员
windows下OpenLDAP的安装与配置

Windows下OpenLDAP的安装与配置 本文主要参考官方文档:http://www.openldap.org/doc/admin24/quickstart.html 和网上流传的教程:http://www.lifv.cn/?p=462 OpenLDAP下载地址:http://down...

泥巴刀儿
2012/08/29
0
0
使用JAVA自带方法增删改查LDAP

今天搭建了一个openLDAP的环境,并创建了下面的结构: dc=ibm,dc=com ou=developer,dc=ibm,dc=com ou=tester,dc=ibm,dc=com uid=bill,ou=developer,dc=ibm,dc=com uid=kent,ou=tester,dc=ibm......

xpbug
2012/10/31
0
0
Windows下安装使用OpenLDAP

LDAP:(轻量级目录访问协议,Lightweight Directory Access Protocol) 它是基于 X.500标准的,但是简单多了并且可以根据需要定制。与X.500不同,LDAP支持TCP/IP,这对访问Internet是必须的...

张xtpgyaps
2011/06/30
0
0
CentOS 6.9下OpenLDAP 的安装与配置

LDAP 基础教程 LDAP 全称轻量级目录访问协议(英文:Lightweight Directory Access Protocol),是一个运行在 TCP/IP 上的目录访问协议。LDAP实现提供被称为目录服务的信息服务,可以看做是一...

898009427
07/31
0
0
实战部署openldap主从架构

一、openldap介绍 二、openldap特点 三、openldap相关缩写 四、openldap组件 五、openldap环境规划 六、openldap部署---Master端 七、openldap部署---Slave端 八、openldap使用LAM工具管理 ...

jk88
06/26
0
0

没有更多内容

加载失败,请刷新页面

加载更多

day122-20181020-英语流利阅读-待学习

蜘蛛侠新片《毒液》来袭!导演灵感来自哪? Roxy 2018-10-20 1.今日导读 你还记得漫威宇宙中飞檐走壁的蜘蛛侠小可爱吗?在刚过去的国庆黄金周里,索尼影业发行的漫威超级英雄蜘蛛侠系列大片《...

飞鱼说编程
16分钟前
1
0
美团点评Docker容器管理平台

美团点评容器平台简介 本文介绍美团点评的Docker容器集群管理平台(以下简称“容器平台”)。该平台始于2015年,是基于美团云的基础架构和组件而开发的Docker容器集群管理平台。目前该平台为...

Skqing
22分钟前
1
0
JDK8笔记

判断两个对象是否相等 Objects.equals(value1, value2)

呼呼南风
今天
1
0
OSChina 周六乱弹 —— 到底谁是小公猫……

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @莱布妮子:分享Trivium的单曲《Throes Of Perdition》 《Throes Of Perdition》- Trivium 手机党少年们想听歌,请使劲儿戳(这里) @小鱼丁:...

小小编辑
今天
354
5
基础选择器

注意:本教程参考自网上流传的李兴华老师的jquery开发框架视频,但是苦于没有相应的配套笔记,由我本人做了相应的整理. 本次学习的内容 学习jquery提供的各种选择器的使用,掌握了jquery选择...

江戸川
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部