`

java对openldap执行crud操作

    博客分类:
  • ldap
 
阅读更多

java对openldap执行crud操作

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

}

 

 

分享到:
评论

相关推荐

    java对Openldap进行操做

    Java作为一个强大的编程语言,提供了多种方式与OpenLDAP进行交互,实现对用户数据的操作,如增加、删除、修改和查询。本文将深入探讨如何使用Java进行OpenLDAP操作,并结合LdapOperationDemo这个示例程序来阐述具体...

    java操作openldap代码

    java代码操作linux上的openldap目录服务器,进行增删改查操作

    java对LDAP的增删改查

    Java 语言通过 JNDI(Java Naming and Directory Interface)提供了对 LDAP(Lightweight Directory Access Protocol)的支持,允许开发者通过 Java 语言来操作 LDAP 服务器。LDAP 是一种常用的目录服务协议,用于...

    BrowserSrc-27.tar.gz_java openldap_openldap

    openldap浏览器的Java代码实现

    基于OpenLdap操作工具类(增删改查)

    在这个场景中,我们将深入探讨如何通过Java编程语言创建一个基于OpenLDAP的操作工具类,实现对目录服务的增删改查功能。 首先,理解OpenLDAP的基本概念是至关重要的。OpenLDAP是一个开源的LDAP服务器,它提供了...

    openldap

    OpenLDAP 是一个开源的轻量级目录访问协议(Lightweight Directory Access Protocol)实现,它提供了对目录服务的强大支持。在IT行业中,OpenLDAP 被广泛用于存储和管理组织结构数据,例如用户账户、联系人信息、组...

    windows下openldap的安装与java操作测试

    windows下openldap的安装与java操作测试 windows下openldap的安装与java操作测试

    openldap for linux 操作文档

    ### OpenLDAP for Linux操作文档:理解与应用 #### 了解LDAP协议 LDAP(Lightweight Directory Access Protocol,轻量级目录访问协议)是一种基于X.500标准的目录访问协议,用于在网络环境下提供目录服务。它最初...

    windows版的openldap

    标题中提到的"windows版的openldap"意味着我们将在Windows操作系统上安装和运行OpenLDAP。这与在Linux等Unix-like系统上的安装过程有所不同,因为Windows版本可能需要特殊的配置步骤和依赖项管理。 描述中提到...

    windows下搭建并配置OpenLDAP服务器

    3. **执行查询和操作**: 使用`search()`方法进行目录查询,`bind()`和`unbind()`方法进行条目的添加和删除,`modify()`方法进行条目的更新。 4. **处理结果**: 查询结果以NamingEnumeration的形式返回,可以通过迭代...

    可以供参考的用于对openldap操作的一系列函数,提供了接口函数.rar

    在C#编程中,与OpenLDAP进行交互通常需要使用特定的API或库,而"可以供参考的用于对openldap操作的一系列函数,提供了接口函数.rar"这个压缩包可能包含了一些帮助开发者实现这一目标的函数和头文件。 首先,`slapd....

    活动目录 、OpenLDAP... 操作示例代码

    `OpenLDAP.cs`可能是实现OpenLDAP操作的C#类库,包含连接LDAP服务器、执行搜索、添加、删除和修改记录等功能。 3. **操作示例代码**:`ADConfigSchema.Designer.cs`可能包含了活动目录配置的元数据,`...

    ldap openldap

    3. **执行操作**: 使用`InitialDirContext`对象执行查询、添加、删除和修改等操作。 4. **搜索操作**: 使用`SearchControls`和`NamingEnumeration`来执行 LDAP 查询,获取匹配的条目。 5. **连接管理**: 关闭连接以...

    OpenLdap安装及配置

    安装 OpenLDAP 服务器需要使用 BerkeleyDB,首先,需要下载 OpenLDAP 的源代码,解压缩后,进入 OpenLDAP 目录,执行 configure、make 和 make install 命令。configure 命令需要指定 BerkeleyDB 的 include 和 lib ...

    openldap 2.4.42

    10. **工具和命令行**:OpenLDAP提供了一系列实用工具,如`ldapadd`、`ldapdelete`、`ldapsearch`等,用于管理目录和执行操作。 在下载并安装OpenLDAP 2.4.42后,通常会有一个包含头文件、库文件和可执行程序的文件...

    java连接LDAP的jar包和实例

    总的来说,理解如何在Java中使用jLDAP库与LDAP服务器进行SSL连接,并执行各种操作,对于开发涉及目录服务的软件至关重要。这包括了熟悉LDAP的基本概念,如DN(Distinguished Name)、过滤器以及属性操作,以及在Java...

    OpenLDAP-Admin-Guide.pdf open ldap 官网2.6.2 版本操作指南

    《OpenLDAP 2.6 管理指南》是一份为熟悉基于LDAP的目录服务的有经验系统管理员准备的操作手册。这份文档旨在帮助用户在UNIX及其类似系统上安装OpenLDAP软件2.6版本。OpenLDAP是一款开源的轻量级目录访问协议...

    windows 下安装和使用OpenLDAP。

    OpenLDAP 广泛应用于各大软件公司的产品中,如 Microsoft 的 Active Directory、iPlanet 的 iPlanet Directory Server(现已更名为:Sun Java System Directory Server)、Lotus 的 Domino Directory、IBM 的 ...

    OpenLdap2.4各版本包

    OpenLDAP 2.4系列是其一个重要且广泛应用的版本,提供了多种功能和改进,以适应不同的操作系统环境。然而,正如描述中所指出的,不同版本的OpenLDAP可能与特定的Linux发行版存在兼容性问题。下面将详细探讨OpenLDAP ...

Global site tag (gtag.js) - Google Analytics