1. 认证信息:
package com.royal.jldap; import java.util.Hashtable; import javax.naming.Context; import javax.naming.NamingException; import javax.naming.directory.DirContext; import javax.naming.directory.InitialDirContext; /** * @Description JAVA LDAP 认证信息 * * @author 萧_瑟 * @version 1.0 创建时间 2013-1-22 * */ public class LDAPTest { private static String ldapURL = "ldap://192.168.xx.xx:389/"; public static void main(String[] args) { rootCredentials(); xsCredentials(); } // database bdb // suffix "dc=gzis,dc=ac.cn" // checkpoint 1024 15 // rootdn "cn=Manager,dc=gzis,dc=ac.cn" // rootpw secret public static void rootCredentials() { String root = "cn=Manager,dc=gzis,dc=ac.cn";// root Hashtable<String, String> env = new Hashtable<String, String>(); env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory"); env.put(Context.PROVIDER_URL, ldapURL); env.put(Context.SECURITY_AUTHENTICATION, "simple"); env.put(Context.SECURITY_PRINCIPAL, root); env.put(Context.SECURITY_CREDENTIALS, "secret"); DirContext ctx = null; try { ctx = new InitialDirContext(env); System.out.println("root认证成功"); } catch (NamingException e) { e.printStackTrace(); System.out.println("root认证失败"); } catch (Exception e) { System.out.println("root认证出错:"); e.printStackTrace(); } if (ctx != null) { try { ctx.close(); } catch (NamingException e) { e.printStackTrace(); } } } // dn: cn=xiao se,ou=people,dc=gzis,dc=ac.cn // objectClass: inetOrgPerson // cn: xiao se // sn: xiao se // uid: xs // userPassword: 123456 // description: 高级工程师 public static void xsCredentials() { String root = "cn=xiao se,ou=people,dc=gzis,dc=ac.cn"; Hashtable<String, String> env = new Hashtable<String, String>(); env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory"); env.put(Context.PROVIDER_URL, ldapURL); env.put(Context.SECURITY_AUTHENTICATION, "simple"); env.put(Context.SECURITY_PRINCIPAL, root); env.put(Context.SECURITY_CREDENTIALS, "123456"); DirContext ctx = null; try { ctx = new InitialDirContext(env); System.out.println("xiao se认证成功"); } catch (NamingException e) { e.printStackTrace(); System.out.println("xiao se认证失败"); } catch (Exception e) { System.out.println("xiao se认证出错:"); e.printStackTrace(); } if (ctx != null) { try { ctx.close(); } catch (NamingException e) { e.printStackTrace(); } } } }
2. 增加信息:
package com.royal.jldap; import java.util.Hashtable; import javax.naming.Context; import javax.naming.NamingException; import javax.naming.directory.BasicAttribute; import javax.naming.directory.BasicAttributes; import javax.naming.directory.DirContext; import javax.naming.directory.InitialDirContext; /** * @Description JAVA LDAP 创建/添加数据 * * @author 萧_瑟 * @version 1.0 创建时间 2013-1-23 * */ public class LDAPAdd { private static String ldapURL = "ldap://192.168.xx.xx:389/"; public static void main(String[] args) { String account = "Manager";// 操作LDAP的帐户。默认就是Manager。 String password = "secret";// 帐户Manager的密码。 String root = "dc=gzis,dc=ac.cn"; // LDAP的根节点的DC // 添加失败,无添加权限,运行报错 // String account = "xiao se"; // String password = "123456"; // String root = "ou=people,dc=gzis,dc=ac.cn"; Hashtable<String, String> env = new Hashtable<String, String>(); env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory"); env.put(Context.PROVIDER_URL, ldapURL); env.put(Context.SECURITY_AUTHENTICATION, "simple"); env.put(Context.SECURITY_PRINCIPAL, "cn=" + account + "," + root); env.put(Context.SECURITY_CREDENTIALS, password); DirContext ctx = null; try { // 初始化上下文 ctx = new InitialDirContext(env); System.out.println("root认证成功"); // 创建一个组 // String ou = "testGroup"; // BasicAttributes attrs = new BasicAttributes(); // BasicAttribute objclassSet = new BasicAttribute("objectClass"); // objclassSet.add("organizationalUnit"); // attrs.put(objclassSet); // attrs.put("ou", ou); // ctx.createSubcontext("ou=" + ou + "," + root, attrs); //添加一个用户 BasicAttributes attrs = new BasicAttributes(); BasicAttribute objclassSet = new BasicAttribute("objectClass"); objclassSet.add("inetOrgPerson"); attrs.put(objclassSet); attrs.put("cn", "admin@gziscas"); attrs.put("userPassword", "123456"); attrs.put("uid", "admin@gziscas"); attrs.put("mail", "xx@xxx.com"); attrs.put("sn", "admin"); attrs.put("homePhone", "110xxxxxx"); attrs.put("description", "租户管理员"); ctx.createSubcontext("cn=admin@gziscas,ou=people," + root, attrs); } catch (Exception e) { e.printStackTrace(); } if (ctx != null) { try { ctx.close(); } catch (NamingException e) { e.printStackTrace(); } } } }
3. 删除信息:
package com.royal.jldap; import java.util.Hashtable; import javax.naming.Context; import javax.naming.NamingException; import javax.naming.directory.DirContext; import javax.naming.directory.InitialDirContext; /** * @Description JAVA LDAP 删除数据 * * @author 萧_瑟 * @version 1.0 创建时间 2013-1-23 * */ public class LDAPDelete { private static String ldapURL = "ldap://192.168.xx.xx:389/"; public static void main(String[] args) { String account = "Manager";// 操作LDAP的帐户。默认就是Manager。 String password = "secret";// 帐户Manager的密码。 String root = "dc=gzis,dc=ac.cn"; // LDAP的根节点的DC // 删除失败,无删除权限,运行不报错 // String account = "xiao se"; // String password = "123456"; // String root = "ou=people,dc=gzis,dc=ac.cn"; Hashtable<String, String> env = new Hashtable<String, String>(); env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory"); env.put(Context.PROVIDER_URL, ldapURL); env.put(Context.SECURITY_AUTHENTICATION, "simple"); env.put(Context.SECURITY_PRINCIPAL, "cn=" + account + "," + root); env.put(Context.SECURITY_CREDENTIALS, password); DirContext ctx = null; try { // 初始化上下文 ctx = new InitialDirContext(env); System.out.println("root认证成功"); // 删除 ctx.destroySubcontext("cn=admin@gziscas,ou=people," + root); } catch (Exception e) { e.printStackTrace(); } if (ctx != null) { try { ctx.close(); } catch (NamingException e) { e.printStackTrace(); } } } }
4. 查询信息:
package com.royal.jldap; 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.DirContext; import javax.naming.directory.InitialDirContext; import javax.naming.directory.SearchControls; import javax.naming.directory.SearchResult; /** * @Description JAVA LDAP 数据查询 * * @author 萧_瑟 * @version 1.0 创建时间 2013-1-23 * */ public class LDAPSearch { private static String ldapURL = "ldap://192.168.xx.xx:389/"; public static void main(String[] args) { String account = "Manager";// 操作LDAP的帐户。默认就是Manager。 String password = "secret";// 帐户Manager的密码。 String root = "dc=gzis,dc=ac.cn"; // LDAP的根节点的DC Hashtable<String, String> env = new Hashtable<String, String>(); env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory"); env.put(Context.PROVIDER_URL, ldapURL); env.put(Context.SECURITY_AUTHENTICATION, "simple"); env.put(Context.SECURITY_PRINCIPAL, "cn=" + account + "," + root); env.put(Context.SECURITY_CREDENTIALS, password); DirContext ctx = null; try { //初始化上下文 ctx = new InitialDirContext(env); System.out.println("root认证成功"); //查询 SearchControls constraints = new SearchControls(); constraints.setSearchScope(SearchControls.SUBTREE_SCOPE); // constraints.setSearchScope(SearchControls.ONELEVEL_SCOPE); // 查询所有用户 // NamingEnumeration en = ctx.search(root, "uid=*", constraints); NamingEnumeration en = ctx.search(root, "objectclass=*", constraints); // NamingEnumeration en = ctx.search(root, "ou=*", constraints); // NamingEnumeration en = ctx.search(root, "description=*", 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(); } } catch (NamingException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } if (ctx != null) { try { ctx.close(); } catch (NamingException e) { e.printStackTrace(); } } } }
5. 修改信息:
package com.royal.jldap; import java.util.Hashtable; import javax.naming.Context; import javax.naming.NamingException; import javax.naming.directory.BasicAttribute; import javax.naming.directory.DirContext; import javax.naming.directory.InitialDirContext; import javax.naming.directory.ModificationItem; /** * @Description JAVA LDAP 修改数据 * * @author 萧_瑟 * @version 1.0 创建时间 2013-1-23 * */ public class LDAPModify { private static String ldapURL = "ldap://192.168.xx.xx:389/"; public static void main(String[] args) { String account = "Manager";// 操作LDAP的帐户。默认就是Manager。 String password = "secret";// 帐户Manager的密码。 String root = "dc=gzis,dc=ac.cn"; // LDAP的根节点的DC // 修改失败,无修改权限,运行报错 // String account = "xiao se"; // String password = "123456"; // String root = "ou=people,dc=gzis,dc=ac.cn"; Hashtable<String, String> env = new Hashtable<String, String>(); env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory"); env.put(Context.PROVIDER_URL, ldapURL); env.put(Context.SECURITY_AUTHENTICATION, "simple"); env.put(Context.SECURITY_PRINCIPAL, "cn=" + account + "," + root); env.put(Context.SECURITY_CREDENTIALS, password); DirContext ctx = null; try { // 初始化上下文 ctx = new InitialDirContext(env); System.out.println("root认证成功"); // 修改 String description = "屌丝逆袭"; String userPassword = "123456"; ModificationItem modificationItem[] = new ModificationItem[2]; modificationItem[0] = new ModificationItem(DirContext.REPLACE_ATTRIBUTE, new BasicAttribute("description", description)); modificationItem[1] = new ModificationItem(DirContext.REPLACE_ATTRIBUTE, new BasicAttribute("userPassword", userPassword)); ctx.modifyAttributes("cn=admin@gziscas,ou=people," + root, modificationItem); } catch (Exception e) { e.printStackTrace(); } if (ctx != null) { try { ctx.close(); } catch (NamingException e) { e.printStackTrace(); } } } }
demo前提:已经配置好了LDAP服务器。
参考:
http://blog.sina.com.cn/s/blog_63533db30100mf05.html
http://spiritfrog.iteye.com/blog/390994
http://blog.163.com/lang_zi_ming/blog/static/1140161762012470537349/
相关推荐
springldap增删改查的源码 适合初学者下载学习 写的很简答 注释中加入了自己写代码遇到的问题解决方案和心得
本示例主要讲解了如何使用C#进行数据库的增删改查(CRUD)操作,这对于开发Windows桌面应用程序,如Winform程序,尤其关键。 首先,C#操作数据库通常会利用ADO.NET框架,它提供了丰富的类库来连接、查询和管理...
本例较简单的实现了LDAP的增删改查功能,分类关于java接口和c语言接口都有说明,适用于初学者
在Java中,我们可以利用JNDI(Java Naming and Directory Interface)库来与LDAP服务器进行交互,实现对目录服务的增、删、改、查操作,也就是所谓的CRUD(Create, Read, Update, Delete)。 ### 增(Create) 在...
下面将详细阐述基于Spring LDAP的增删改查操作和用户验证。 **1. 增加(Add)操作** 在Spring LDAP中,我们通常会使用`LdapTemplate`来进行数据的添加。首先,需要创建一个`LdapEntry`对象,包含要插入的属性和值。...
java Ldap增删改查代码。ldap样例数据,可用来导入。
Java 对 LDAP 的增删改查 Java 语言通过 JNDI(Java Naming and Directory Interface)提供了对 LDAP(Lightweight Directory Access Protocol)的支持,允许开发者通过 Java 语言来操作 LDAP 服务器。LDAP 是一种...
LDAP增、删、改、查操作 LDAP(Lightweight Directory Access Protocol,轻量级目录访问协议)是用于管理目录服务的协议,广泛应用于身份验证、授权和目录管理等领域。本文将对LDAP的增、删、改、查操作进行详细...
**Spring LDAP与JNDI:增删改查详解** 在Java开发中,当我们需要与目录服务进行交互,例如用户认证、权限管理等,Spring LDAP和Java Naming and Directory Interface (JNDI)是两个常用的技术。本文将通过一个入门级...
本文将深入探讨基于LDAP的增删改查操作的源码实现,以及批量处理的相关技术,并结合作者的实践心得,帮助你理解和应用这些知识。 一、LDAP的基础概念 LDAP目录服务是一种数据库,它存储的是轻量级的、易于查找的...
例如,创建一个继承自`LdapRepository`的接口,可以定义增删改查的通用方法: ```java public interface UserRepository extends LdapRepository, String> { User findByUid(String uid); List<User> findBySn...
本示例项目 "spring-ldap demo" 提供了一个关于如何使用 Spring LDAP 进行实际操作的详细教程,包括与 LDAP 目录的增删查改操作,并结合了 EXT.js 进行前端展示。 首先,我们来了解一下 Spring LDAP 的核心概念。...
本文将深入探讨如何使用Java通过LDAP(轻量级目录访问协议)和SSL(安全套接层)来实现用户和组织(部门)的增删改查操作,并结合证书确保通信的安全性。这些功能通常用于大型企业的用户管理,例如Active Directory...
物超所值,也是突然接了这么个东西,无文档,无经验,网上介绍也少。然后硬着头皮做了,包含组织的增删改,用户的增删改还有特定用户的查询。保证能用。报53代号的请确保自己的服务器设置正确。
"简单的ldap客户端" 就是这样一种工具,旨在提供一个替代传统ldapAdmin的简便方案,且无需注册,方便用户直接使用。 **替代ldapAdmin** ldapAdmin是一款流行的LDAP管理工具,提供了强大的目录管理功能,包括编辑、...
4. **安全管理**:LdapBrowser支持连接到使用不同安全级别的服务器,如匿名连接、简单认证、SSL/TLS 加密等。 5. **导入与导出**:可以将目录数据导入或导出为不同的格式,方便数据迁移或备份。 6. **日志记录与调试...
**LDAP浏览器:深入理解与应用** LDAP(轻量级目录访问协议)是一种用于查询和管理分布式目录服务的网络协议,广泛应用于企业环境中的用户身份验证、权限管理和数据共享。LdapBrowser是一款专为开放源代码的...
《OpenLDAP简易客户端详解》 在信息技术领域, Lightweight Directory Access Protocol(轻量级目录访问协议,...总的来说,OpenLDAP简易客户端是OpenLDAP环境中不可或缺的工具,它使管理目录服务变得更加简单易行。
**Spring LDAP 简介** Spring LDAP 是一个用于简化Java应用程序与LDAP(轻量级目录访问协议)交互的框架。它构建在Spring框架之上,提供了一种声明式的方式来处理 LDAP 查询,使得开发者能够更容易地集成LDAP服务到...
1. **图形化界面**:LdapAdmin提供了直观的用户界面,使得LDAP目录操作变得简单易懂,非技术背景的管理员也能快速上手。 2. **多语言支持**:作为一款国际化的工具,LdapAdmin支持多种语言,包括中文,方便不同地区...