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

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值