文档章节

java对openldap执行crud操作

chaun
 chaun
发布于 2015/04/02 11:43
字数 633
阅读 16
收藏 0
点赞 0
评论 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
粉丝 85
博文 262
码字总数 96237
作品 0
深圳
高级程序员
完整版的OpenLDAP搭建全过程

http://www.cnblogs.com/lemon-le/p/6266921.html 完整版的OpenLDAP搭建全过程 总结: 先写总结,再写正文,嘿嘿嘿。这还是第一次认真的写个文档,写个总结,哈哈。大概在一个月前,第一次听...

wangpengtai ⋅ 04/20 ⋅ 0

OpenLDAP 服务端安装与配置以及原理

OpenLDAP 服务端安装与配置 一、什么是LDAP 目录是一个为查询、浏览和搜索而优化的专业分布式数据库,它呈树状结构组织数据,就好象Linux/Unix系统中的文件目录一样。目录数据库和关 系数据库...

luweiv998 ⋅ 06/04 ⋅ 0

Openldap 整合windows AD认证

Openldap 整合windows AD认证 Table of Contents I.解决的问题2 II.流程图2 III.具体配置3 A.检查Openldap3 B.Saslauthd安装配置3 1.安装3 2.【可选】先熟悉、测试sasl本身3 3.配置sasl关联到...

xucaibao1979 ⋅ 06/05 ⋅ 0

windows环境下OpenLDAP安装与客户端连接配置

1.下载安装OpenLDAP版本 C:UsersAdministrator>slapd -V OpenLDAP 2.4.42 Standalone LDAP Server (slapd) 2.安装过程中,全部用默认的操作执行即可。 3.修改OpenLDAP文件如下: # MDB Back...

keppy ⋅ 05/07 ⋅ 0

【Ovirt 笔记】engine 用户扩展管理分析与整理

文前说明 作为码农中的一员,需要不断的学习,我工作之余将一些分析总结和学习笔记写成博客与大家一起交流,也希望采用这种方式记录自己的学习之旅。 本文仅供学习交流使用,侵权必删。 不用...

羽杰 ⋅ 06/13 ⋅ 0

JavaWeb07-HTML篇笔记(二)

1.1 案例一:使用JDBC完成CRUD的操作:1.1.1 需求: 对分类管理使用JDBC进行CRUD的操作. 1.1.2 分析:1.1.2.1 技术分析: 【JDBC的概述】 Ø JDBC:Java DataBase Connectivity Java数据库的连...

我是小谷粒 ⋅ 05/16 ⋅ 0

Spring之jdbc Template实现CRUD操作

Spring为各种持久化技术都提供了简单操作的模板回调。比如jdbc、hibernate、Mybatis以及JPA等。 这里我们就以JDBC为例,看看JDBC template怎么实现CRUD操作。 JdbcTemplate主要提供以下几类方...

Java攻城玩家 ⋅ 05/31 ⋅ 0

III(二十一)OpenVPN(2)

案例1: 多个机房利用OpenVPN互联架构方案: 注: vpn client角色相当于宿主机win的拨号端; vpn server和vpn client均执行(1、firewall(避免影响port服务和转发);2、关闭selinux;3、开...

技术小阿哥 ⋅ 2017/11/27 ⋅ 0

Percona Server for MongoDB 3.4.14-2.12 现已发布

Percona 宣布发布 Percona Server for MongoDB 3.4.14-2.12。Percona Server for MongoDB 是一款增强型,开放源代码且高度可扩展的数据库,它是MongoDB 3.2社区版的完全兼容的替代产品。它支...

周其 ⋅ 04/14 ⋅ 0

基于 Spring Boot 的字段元数据管理 - fieldmeta

fieldmeta: 基于springboot的字段元数据管理 version:Alpha 0.0.1 ,码云地址:https://gitee.com/klguang/fieldmeta 元数据(Metadata), 又称中介数据、中继数据,为描述数据的数据(dat...

klguang ⋅ 06/15 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

20.zip压缩 tar打包 打包并压缩

6月25日任务 6.5 zip压缩工具 6.6 tar打包 6.7 打包并压缩 6.5 zip压缩工具: zip支持压缩目录 zip压缩完之后原来的文件不删除 不同的文件内容其实压缩的效果不一样 文件内有很多重复的用xz压...

王鑫linux ⋅ 11分钟前 ⋅ 0

double类型数据保留四位小数的另一种思路

来源:透析公式处理,有时候数据有很长的小数位,有的时候由在四位以内,如果用一般的处理方法,那么不足四位的小树会补充0到第四位,这样子有点画蛇添足的感觉,不太好看。所以要根据小数的...

young_chen ⋅ 18分钟前 ⋅ 0

Python 优化 回溯下降算法

使用sympy构造表达式,实现回溯下降算法 画出函数图像,先使用暴力搜索,找到最小值约为2.5左右 然后选定初始点,开始进行回溯搜索,下降方向为负梯度方向 下降的误差与步数大致呈现下面的状...

阿豪boy ⋅ 23分钟前 ⋅ 0

Django配置163邮箱出现 authentication failed(535)错误解决方法

最近用Django写某网站,当配置163邮箱设置完成后,出现535错误即:smtplib.SMTPAuthenticationError: (535, b'Error: authentication failed') Django初始配置邮箱设置 EMAIL_HOST = "smtp.1...

陈墨轩_CJX ⋅ 24分钟前 ⋅ 0

用接口模拟可伸缩枚举(34)

1、枚举的可伸缩性最后证明都不是什么好点子 扩展类型的元素是基本类型实例,基本类型的实例却不是扩展类型的元素,很混乱 目前还没有很好的方法来枚举基本类型的所有元素,及其扩展 可伸缩性...

职业搬砖20年 ⋅ 28分钟前 ⋅ 0

Ubuntu18.04 IDEA快捷键无法使用

IDEA默认的回退到上一视图的快捷键是Ctrl + Alt + Left,在ubuntu中这个快捷键被占用了,在16.04中可以在界面中取消这个快捷键,但是18.04就看不到了,可以使用以下命令解决 gsettings set ...

Iceberg_XTY ⋅ 32分钟前 ⋅ 0

如何解决s权限位引发postfix及crontab异常

一、问题现象 业务反馈某台应用服务器,普通用户使用mutt程序发送邮件时,提示“postdrop warning: mail_queue_enter: create file maildrop/713410.6065: Permission denied”,而且普通用法...

问题终结者 ⋅ 44分钟前 ⋅ 0

Unable to load database on disk

由于磁盘空间满了以后,导致zookeeper异常退出,清理磁盘空间后,zk启动报错,信息如下: 2018-06-25 17:18:46,904 INFO org.apache.zookeeper.server.quorum.QuorumPeerConfig: Reading co...

刀锋 ⋅ 今天 ⋅ 0

css3 box-sizing:border-box 实现div一行多列

<!DOCTYPE html><html><head><style> div.container{ background:green; padding:10px 10px;}div.box{box-sizing:border-box;-moz-box-sizing:border-box; /* Fir......

qimh ⋅ 今天 ⋅ 0

Homebrew简介和基本使用

一、Homebrew是什么 Homebrew是一款Mac OS平台下的软件包管理工具,拥有安装、卸载、更新、查看、搜索等很多实用的功能。简单的一条指令,就可以实现包管理,而不用你关心各种依赖和文件路径...

说回答 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部