文档章节

java对openldap执行crud操作

chaun
 chaun
发布于 2015/04/02 11:43
字数 633
阅读 18
收藏 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
java怎么转化openLDAP的octetstring成byte[]?

领导叫我用openLDAP做个用户证书共享,在字段中有个用户图片字段,我用的是octetstring来存储的,就是八进制字符串,对应java的字段是byte[],我把数据能成功的推进openLDAP中,用apache的一...

hyanqing
2012/04/08
738
1
Windows下安装使用OpenLDAP

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

张xtpgyaps
2011/06/30
0
0
Apache Fortress 1.0.0 发布,用于 LDAP v3 兼容系统

Apache Fortress 1.0.0 发布了,Apache Fortress™ 是一个基于 Open Source Identity Access Management 标准的 Java 实现,用于 LDAP v3 兼容系统。100% 兼容 RBAC, ARBAC02 和 IETF 的密码......

oschina
2016/04/19
1K
0

没有更多内容

加载失败,请刷新页面

加载更多

为什么要学习Python?这10个理由足够了!

摘要: 看完这十个理由,我决定买本python从入门到精通! 如果你定期关注现今的科技发展,那么你可能想知道我为什么要写这篇文章告诉人们学习Python?因为几年前我提倡Java而不是Python。 在...

阿里云官方博客
17分钟前
2
0
spring服务方式配置okhttp3

问题 如果把OKhttp以Spring服务方式配置,就解决了从配置中心运行时刷新配置参数的问题。 OkHttpConfig.java package com.zyl.config;import okhttp3.OkHttpClient;import org.springfra...

亚林瓜子
18分钟前
2
0
8张图让你一步步看清 async/await 和 promise 的执行顺序

**摘要:**面试必问 原文:8张图帮你一步步看清 async/await 和 promise 的执行顺序 作者:ziwei3749 Fundebug经授权转载,版权归原作者所有。 为什么写这篇文章? 说实话,关于js的异步执行顺...

Fundebug
18分钟前
1
0
Linux 命令菜单

#!/bin/bash #menu.sh menu(){ source ~/.bashrc echo "=================================" echo "Please enter your choise:" echo "(0) Kill all java" echo "(1) Start all tomcat" echo......

mellen
24分钟前
3
0
原来云数据库也是有思想的...

本文由一刻talks发表 邵宗文,腾讯云数据库专家副总监。十余年数据库从业经验,2009年加入腾讯,曾负责腾讯网,新闻客户端,快报,视频,财经,体育等数据库平台部署、规划及运维支持工作。本...

腾讯云加社区
25分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部