Apache DS:使用Java方式对entry进行操作

Posted 你是小KS

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Apache DS:使用Java方式对entry进行操作相关的知识,希望对你有一定的参考价值。

当前版本: apacheds-2.0.0.AM26

1. 声明

当前内容主要为j记录使用Java方式操作Apache DS

当前操作:

  1. 创建entry、为entry绑定对象、重新绑定、删除绑定
  2. 删除entry

注意:如果entry绑定了对象或者属性,那么删除会报错的!!

2. 启动Apache DS

./bin/apacheds.sh start并开放10389端口,apache ds默认启动在10389
apache ds默认会在第一次启动的时候使用实例default,并完成partition操作,此后不再加载ldif文件

3. 基本操作demo

private static final String HOST = "192.168.1.100";
private static Hashtable<String, String> createEnv() 
	Hashtable<String, String> env = new Hashtable<String, String>();
	env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
	env.put(Context.PROVIDER_URL, "ldap://" + HOST + ":10389");
	env.put(Context.SECURITY_PRINCIPAL, "uid=admin,ou=system");
	env.put(Context.SECURITY_CREDENTIALS, "secret");
	return env;

private static void printSamplePartition() 
	Hashtable<String, String> env = createEnv();
	// 创建对Dir访问操作的上下文
	DirContext basicCtx = null;
	NamingEnumeration<Binding> listBindings  = null;
	try 

		basicCtx = new InitialDirContext(env);
		// 通过lookup方式切换当前的位置为特定的文件夹位置(相当于cd操作切换到该目录下面)
		DirContext examplePartition = (DirContext) basicCtx.lookup("dc=example,dc=com");
		listBindings = examplePartition.listBindings("");
		listBindginEnumeration(listBindings);
		
		//	1. 创建实体
		System.out.println("创建实体Fruits");
		LdapName ldapName = new LdapName("cn=Fruits");
		examplePartition.createSubcontext(ldapName);
		listBindings = examplePartition.listBindings("");
		listBindginEnumeration(listBindings);
		//	2. 为实体绑定对象
		DirContext fruitsContext = (DirContext) basicCtx.lookup("cn=Fruits,dc=example,dc=com");
		System.out.println("为实体Fruits绑定对象");
		// 绑定的必须是存在的
		fruitsContext.bind("cn=Fruits", new Fruit("orange"));
		listBindings = fruitsContext.listBindings("");
		listBindginEnumeration(listBindings);
		//	3. 为实体重新绑定对象
		System.out.println("为实体Fruits重新绑定对象");
		fruitsContext.rebind("cn=Fruits", new Fruit("apple"));
		listBindings = fruitsContext.listBindings("");
		listBindginEnumeration(listBindings);
		//	4. 解除对象绑定
		System.out.println("为实体Fruits解除绑定对象");
		fruitsContext.unbind("cn=Fruits");
		listBindings = fruitsContext.listBindings("");
		listBindginEnumeration(listBindings);
		//	5. 删除这个实体
		System.out.println("删除实体Fruits");
		examplePartition.destroySubcontext("cn=Fruits");
		listBindings = examplePartition.listBindings("");
		listBindginEnumeration(listBindings);

	 catch (Exception e) 
		e.printStackTrace();
	 finally 
		close(basicCtx);
	


执行结果:

4. 总结

1. lookup默认执行后返回的东西就是相当于cd文件的结果目录,所以使用的时候需要小心,list("")默认就是查看当前路径下的东西

2. 删除一个entry必须首先解除绑定、删除属性之后才可以执行删除实体的操作

3.apache ds启动的时候默认提供了一个example的partition(dc=example,dc=com

以上是关于Apache DS:使用Java方式对entry进行操作的主要内容,如果未能解决你的问题,请参考以下文章

SpringBoot之data操作Apache DS完成对用户操作

Java中Map的 entrySet() 详解以及用法(四种遍历map的方式)

Java中遍历ConcurrentHashMap的四种方式

Java中Map集合的遍历方式

java中Map.Entry的使用方法

java笔记java中的Map.Entry和Map.entrySet()方法的使用