`
crowson
  • 浏览: 10053 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

LDAP简单示例

 
阅读更多
import java.util.Enumeration;
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 LdapTest {
 public static void main(String[] args) {
  String account = "admin";
  String password = "1";
  String root = "o=com"; // root

  Hashtable env = new Hashtable();
  env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
  env.put(Context.PROVIDER_URL, "ldap://localhost:389/" + root);
  env.put(Context.SECURITY_AUTHENTICATION, "simple");
  env.put(Context.SECURITY_PRINCIPAL, "cn=" + account + "," + root);
  env.put(Context.SECURITY_CREDENTIALS, password);

  DirContext ctx = null;
  try {
   // 链接ldap
   ctx = new InitialDirContext(env);
   System.out.println("ldap认证成功");

   // 3.添加节点
   String newUserName = "user2";
   BasicAttributes attrsbu = new BasicAttributes();
   BasicAttribute objclassSet = new BasicAttribute("objectclass");
   objclassSet.add("person");
   objclassSet.add("top");
   objclassSet.add("organizationalPerson");
   objclassSet.add("inetOrgPerson");
   attrsbu.put(objclassSet);
   attrsbu.put("sn",   newUserName);
   attrsbu.put("uid",   newUserName);
   ctx.createSubcontext("cn=" + newUserName, attrsbu);

   // 5.修改节点
   account = "user2";
   String newDisplayName = "newDisplayName";
   ModificationItem modificationItem[] = new ModificationItem[1];
   modificationItem[0] = new ModificationItem(DirContext.REPLACE_ATTRIBUTE, new BasicAttribute("displayName", newDisplayName));
   ctx.modifyAttributes("cn=" + account, modificationItem);

   // 查询节点
   SearchControls constraints = new SearchControls();
   constraints.setSearchScope(SearchControls.SUBTREE_SCOPE);
   // constraints.setSearchScope(SearchControls.ONELEVEL_SCOPE);
   NamingEnumeration en = ctx.search("", "cn=user2", constraints); // 查询所有用户
   while (en != null && en.hasMoreElements()) {
    Object obj = en.nextElement();
    if (obj instanceof SearchResult) {
     SearchResult si = (SearchResult) obj;
     System.out.println("name:   " + si.getName());
     Attributes attrs = si.getAttributes();
     if (attrs == null) {
      System.out.println("No   attributes");
     } else {
      for (NamingEnumeration ae = attrs.getAll(); ae.hasMoreElements();) {
       Attribute attr = (Attribute) ae.next();
       String attrId = attr.getID();

       for (Enumeration vals = attr.getAll(); vals.hasMoreElements();) {
        System.out.print(attrId + ":   ");
        Object o = vals.nextElement();
        if (o instanceof byte[])
         System.out.println();// new
               // String((byte[])o)
        else
         System.out.println(o);
       }
      }
     }
    } else {
     System.out.println(obj);
    }
    System.out.println();
   }

   // 4.删除节点
   account = "user2";
   ctx.destroySubcontext("cn=" + account);

  } catch (javax.naming.AuthenticationException e) {
   System.out.println("认证失败");
  } catch (Exception e) {
   System.out.println("认证出错:");
   e.printStackTrace();
  }

  if (ctx != null) {
   try {
    ctx.close();
   } catch (NamingException e) {
    // ignore
   }
  }
  System.exit(0);
 }
} 

 

分享到:
评论

相关推荐

    java 操作ldap的简单实例

    Java 操作 LDAP(Lightweight Directory Access Protocol,轻量目录访问协议)的简单实例是 Java 语言中访问和操作 LDAP 服务器的基本示例。本示例展示了如何使用 Java 语言连接 LDAP 服务器,执行搜索操作,并获取...

    Spring Boot中使用LDAP来统一管理用户信息的示例

    在了解了 LDAP 的基础概念之后,我们通过一个简单示例进一步理解!创建一个基础的 Spring Boot 项目,在 pom.xml 中引入两个重要依赖: ```xml <groupId>org.springframework.boot <artifactId>spring-boot-...

    c操作ldap例子c操作ldap例

    ### C语言操作LDAP示例详解 #### 一、概述 本篇将详细介绍如何使用C语言进行LDAP(Lightweight Directory Access Protocol)的操作。LDAP是一种用于访问和管理目录服务的应用层协议,广泛应用于用户身份验证、权限...

    JAVA中使用LDAP进行用户认证

    LDAP是一种基于X.500标准的目录访问协议,但它更简单、更灵活,可以根据需要进行定制。LDAP支持TCP/IP协议,使其可以在Internet上进行访问。 LDAP目录可以存储各种类型的数据,如电子邮件地址、邮件路由信息、人力...

    phpLdap.rar

    以下是一个简单的 LDAP 绑定和搜索操作示例: ```php $ldap_server = 'ldap.example.com'; $ldap_dn = 'cn=Manager,dc=example,dc=com'; $ldap_password = 'secret'; // 连接 LDAP 服务器 $ldap_conn = ldap_...

    Go-ldap-test-tool一个轻量级的ldap测试工具

    6. **自定义脚本**:可能支持通过编写简单的脚本来实现复杂的测试场景,提高测试的灵活性。 对于开发和运维人员来说,Go-ldap-test-tool 提供了一个便捷的界面或者命令行工具,使得 LDAP 测试工作更加高效。通过这...

    ldap-master.zip

    5. **示例应用**:可能包含使用LDAP进行身份验证或查询的简单应用程序,用于演示如何与LDAP服务器交互。 6. **文档**:可能包括关于LDAP概念、命令行工具和API使用的详细文档。 学习和理解这些内容,你可以: - **...

    java连接LDAP的jar包和实例

    下面是一个简单的使用jLDAP进行SSL连接并查询LDAP目录的Java代码示例: ```java import com.novell.ldap.*; public class LDAPSSLExample { public static void main(String[] args) { String ldapUrl = "ldaps:...

    Python 和 LDAP进行域认证

    以下是一个简单的示例代码: ```python import ldap # 连接 LDAP 服务器 l = ldap.initialize('ldap://your_ldap_server') l.protocol_version = ldap.VERSION3 # 搜索用户信息 base_dn = 'dc=your_domain,dc=...

    java对LDAP的增删改查

    我们将使用一个简单的示例程序来演示如何使用 JNDI 连接到 LDAP 服务器,并执行基本的操作。 连接 LDAP 服务器 ---------------- 要连接到 LDAP 服务器,需要使用 JNDI 的 LDAP 实现。首先,需要import 相应的类库...

    LDAP原理配置指南

    2. 有限的信息对象类型:LDAP目录中的信息对象类型相对固定,不支持复杂的数据结构和强大的查询语言,而是通过预定义的简单查询方法进行操作。 3. 结构化数据:LDAP目录采用层次结构,通过Distinguished Name (DN)来...

    spring-Ldap

    **Spring-Ldap 深度解析** ...总之,Spring-Ldap 是一个强大且灵活的工具,它让 LDAP 集成变得简单易行,如果你在工作中涉及到 LDAP 相关的开发,那么掌握 Spring-Ldap 将极大地提升你的工作效率。

    spring ldap的使用

    Spring LDAP是Spring框架的一部分,它提供了一种简单的方式来访问和操作LDAP目录服务。下面将详细阐述这一主题。 ### Spring LDAP的概述 Spring LDAP为开发人员提供了高级抽象层,简化了与LDAP服务器的交互过程。...

    LDAP入門LDAP入門LDAP入門

    下面展示如何使用Python编程语言与LDAP服务器交互的一个简单示例: ```python from ldap3 import Server, Connection, ALL # 连接LDAP服务器 server = Server('ldap.example.com', get_info=ALL) conn = ...

    ldap 访问AD测试

    8. **示例代码**:可能提供了一些使用特定编程语言(如Java或Python)实现的示例代码,展示如何编写LDAP查询和操作。 9. **最佳实践**:关于在实际环境中使用LDAP访问AD时应遵循的一些最佳实践,以确保安全性和性能...

    ldap_delete.rar_c++ ldap_ldap_ldap删除条目

    以下是一个简单的连接示例: ```cpp #include <ldap.h> Ldap* ldap_init(const char* url) { Ldap* ld = ldap_init(url, LDAP_PORT); if (ld == nullptr) { // 处理错误 } return ld; } int ldap_simple_...

    LDAP使用手册.doc

    - **管理简易性**:目录的管理和配置比关系数据库更简单。 - **模式定义**:在关系数据库中需要预先定义表结构,而在目录中,模式是预定义的一系列类,记录必须属于至少一个类。 - **数据组织**:目录以对象形式存储...

    Go-使用Golang编写基于LDAP的Web应用程序

    它使用ASN.1(抽象语法符号一号)编码规则,支持多种认证机制,如简单的绑定、SASL(安全认证层系统)等。 要开始编写基于LDAP的Web应用程序,你需要安装Go语言环境并设置好工作区。之后,引入必要的依赖库,其中`...

Global site tag (gtag.js) - Google Analytics