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

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

相关推荐

Global site tag (gtag.js) - Google Analytics