`
萧_瑟
  • 浏览: 161148 次
社区版块
存档分类
最新评论

LDAP简单的增删查改

    博客分类:
  • java
阅读更多

 

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/

分享到:
评论
3 楼 cherry_鹏 2013-09-06  
萧_瑟 写道
cherry_鹏 写道
兄弟,我最近也在用这个LDAP服务,不怎么熟悉这个东西,现在碰到这个错了.
javax.naming.NameNotFoundException: [LDAP: error code 32 - No Such Object];

具体的情况,我发了一个帖子.能帮我看看吗!?
http://www.iteye.com/topic/1131927
你的目录结构搞错了吧,你先试试我的代码,测试查询的那个,把相应的参数改下。



我试过你的代码了.可以进行查询测试的.
2 楼 萧_瑟 2013-09-06  
cherry_鹏 写道
兄弟,我最近也在用这个LDAP服务,不怎么熟悉这个东西,现在碰到这个错了.
javax.naming.NameNotFoundException: [LDAP: error code 32 - No Such Object];

具体的情况,我发了一个帖子.能帮我看看吗!?
http://www.iteye.com/topic/1131927
你的目录结构搞错了吧,你先试试我的代码,测试查询的那个,把相应的参数改下。
1 楼 cherry_鹏 2013-09-05  
兄弟,我最近也在用这个LDAP服务,不怎么熟悉这个东西,现在碰到这个错了.
javax.naming.NameNotFoundException: [LDAP: error code 32 - No Such Object];

具体的情况,我发了一个帖子.能帮我看看吗!?
http://www.iteye.com/topic/1131927

相关推荐

    springldap源码 增删改查

    springldap增删改查的源码 适合初学者下载学习 写的很简答 注释中加入了自己写代码遇到的问题解决方案和心得

    C#对数据库的操作(包括增删改查)

    本示例主要讲解了如何使用C#进行数据库的增删改查(CRUD)操作,这对于开发Windows桌面应用程序,如Winform程序,尤其关键。 首先,C#操作数据库通常会利用ADO.NET框架,它提供了丰富的类库来连接、查询和管理...

    LDAP的增删改查java和c接口用例

    本例较简单的实现了LDAP的增删改查功能,分类关于java接口和c语言接口都有说明,适用于初学者

    Ldap增删改查

    在Java中,我们可以利用JNDI(Java Naming and Directory Interface)库来与LDAP服务器进行交互,实现对目录服务的增、删、改、查操作,也就是所谓的CRUD(Create, Read, Update, Delete)。 ### 增(Create) 在...

    基于springldap的增删改查以及验证

    下面将详细阐述基于Spring LDAP的增删改查操作和用户验证。 **1. 增加(Add)操作** 在Spring LDAP中,我们通常会使用`LdapTemplate`来进行数据的添加。首先,需要创建一个`LdapEntry`对象,包含要插入的属性和值。...

    java Ldap增删改查测试代码

    java Ldap增删改查代码。ldap样例数据,可用来导入。

    java对LDAP的增删改查

    Java 对 LDAP 的增删改查 Java 语言通过 JNDI(Java Naming and Directory Interface)提供了对 LDAP(Lightweight Directory Access Protocol)的支持,允许开发者通过 Java 语言来操作 LDAP 服务器。LDAP 是一种...

    LDAP增、删、改、查操作

    LDAP增、删、改、查操作 LDAP(Lightweight Directory Access Protocol,轻量级目录访问协议)是用于管理目录服务的协议,广泛应用于身份验证、授权和目录管理等领域。本文将对LDAP的增、删、改、查操作进行详细...

    SpringLDAP和JNDI的增删改查

    **Spring LDAP与JNDI:增删改查详解** 在Java开发中,当我们需要与目录服务进行交互,例如用户认证、权限管理等,Spring LDAP和Java Naming and Directory Interface (JNDI)是两个常用的技术。本文将通过一个入门级...

    ldap增删改查源码

    本文将深入探讨基于LDAP的增删改查操作的源码实现,以及批量处理的相关技术,并结合作者的实践心得,帮助你理解和应用这些知识。 一、LDAP的基础概念 LDAP目录服务是一种数据库,它存储的是轻量级的、易于查找的...

    spring boot集成ldap

    例如,创建一个继承自`LdapRepository`的接口,可以定义增删改查的通用方法: ```java public interface UserRepository extends LdapRepository, String&gt; { User findByUid(String uid); List&lt;User&gt; findBySn...

    spring-ldap demo

    本示例项目 "spring-ldap demo" 提供了一个关于如何使用 Spring LDAP 进行实际操作的详细教程,包括与 LDAP 目录的增删查改操作,并结合了 EXT.js 进行前端展示。 首先,我们来了解一下 Spring LDAP 的核心概念。...

    JAVA通过LDAP+SSL(证书)实现用户和组织(部门)增删改查.zip

    本文将深入探讨如何使用Java通过LDAP(轻量级目录访问协议)和SSL(安全套接层)来实现用户和组织(部门)的增删改查操作,并结合证书确保通信的安全性。这些功能通常用于大型企业的用户管理,例如Active Directory...

    java通过ldap协议对ad域进行增删改查

    物超所值,也是突然接了这么个东西,无文档,无经验,网上介绍也少。然后硬着头皮做了,包含组织的增删改,用户的增删改还有特定用户的查询。保证能用。报53代号的请确保自己的服务器设置正确。

    简单的ldap客户端,可替代ldapAdmin

    "简单的ldap客户端" 就是这样一种工具,旨在提供一个替代传统ldapAdmin的简便方案,且无需注册,方便用户直接使用。 **替代ldapAdmin** ldapAdmin是一款流行的LDAP管理工具,提供了强大的目录管理功能,包括编辑、...

    LdapBrowser282.rar_LdapBrows_LdapBrowser.282_ldap_ldapBrowser_op

    4. **安全管理**:LdapBrowser支持连接到使用不同安全级别的服务器,如匿名连接、简单认证、SSL/TLS 加密等。 5. **导入与导出**:可以将目录数据导入或导出为不同的格式,方便数据迁移或备份。 6. **日志记录与调试...

    LdapBrowser ldap连接工具

    **LDAP浏览器:深入理解与应用** LDAP(轻量级目录访问协议)是一种用于查询和管理分布式目录服务的网络协议,广泛应用于企业环境中的用户身份验证、权限管理和数据共享。LdapBrowser是一款专为开放源代码的...

    Ldap简易客户端.zip

    《OpenLDAP简易客户端详解》 在信息技术领域, Lightweight Directory Access Protocol(轻量级目录访问协议,...总的来说,OpenLDAP简易客户端是OpenLDAP环境中不可或缺的工具,它使管理目录服务变得更加简单易行。

    Spring LDAP 简单使用

    **Spring LDAP 简介** Spring LDAP 是一个用于简化Java应用程序与LDAP(轻量级目录访问协议)交互的框架。它构建在Spring框架之上,提供了一种声明式的方式来处理 LDAP 查询,使得开发者能够更容易地集成LDAP服务到...

    LdapAdmin---LDAP工具

    1. **图形化界面**:LdapAdmin提供了直观的用户界面,使得LDAP目录操作变得简单易懂,非技术背景的管理员也能快速上手。 2. **多语言支持**:作为一款国际化的工具,LdapAdmin支持多种语言,包括中文,方便不同地区...

Global site tag (gtag.js) - Google Analytics