Apache DS:修改启动端口和使用java方式修改登录密码

当前版本: apacheds-2.0.0.AM26

1. 声明

当前内容主要为学习和使用Apache DS,并完成修改端口和密码的操作,当前内容参考:官方文档

主要为:

  1. 手动修改启动端口 (修改10389为389)
  2. 使用java方式修改当前的登录密码 (默认密码为secret)

2. 修改端口

找到特定具有10389的文件夹位置:apacheds-2.0.0.AM26/instances/default/conf/ou=config/ads-directoryserviceid=default/ou=servers/ads-serverid=ldapserver/ou=transports,该文件夹下面的两个文件控制端口
在这里插入图片描述
其中ads-transportid=ldap.ldif控制端口10389,ads-transportid=ldaps.ldif控制端口10636

关闭apacheds:./bin/apacheds.sh stop

将文件下载到本地并修改属性后上传至服务器即可,这里修改为389端口
在这里插入图片描述
再次启动apacheds: ./bin/apacheds.sh start

查看当前端口:
在这里插入图片描述
发现端口修改成功

3. 修改密码

查看官方图片
在这里插入图片描述
可以发现当前用户admin的密码是存在于:ou=system这个partition中的uid=admin这个实体中的userPassword属性的,可以通过手动切换到实体并修改属性即可完成密码修改

通过查看属性和调试发现密码刚开始是secret,且是byte[],所以修改的时候直接用byte[]替换,但是修改后却变成了{SSHA}XXX

实现如下:

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 + ":389");
	env.put(Context.SECURITY_PRINCIPAL, "uid=admin,ou=system");
	env.put(Context.SECURITY_CREDENTIALS, "secret");
	return env;
}
private static void changeAdminPassword() {
// 填充必要的配置属性,例如连接用户名和密码以及访问的ldpa的IP和端口
	Hashtable<String, String> env = createEnv();
	// 创建对Dir访问操作的上下文
	DirContext ctx = null;
	try {
		ctx = new InitialDirContext(env);

		// 查询ou=schema这个文件夹下面的内容
		NamingEnumeration<NameClassPair> list = ctx.list("ou=system");
		listNamingEnumeration(list);
		DirContext adminContext = (DirContext)ctx.lookup("uid=admin,ou=system");
		Attributes attributes = adminContext.getAttributes("");
		listAttributes(attributes);
		Attribute attribute = attributes.get("userPassword");
		byte[] pwdBytes = (byte[])attribute.get(0);
		System.out.println("当前的密码为:"+new String(pwdBytes, "utf-8"));
		
		//	手动修改这个密码,并设置为123456
		String newPwd="123456";
		BasicAttributes basicAttributes = new BasicAttributes("userPassword", newPwd.getBytes("utf-8"));
		//	如果使用DirContext.ADD_ATTRIBUTE表示可以使用多个密码进行登录操作
		
		adminContext.modifyAttributes("", DirContext.REPLACE_ATTRIBUTE, basicAttributes);
		System.out.println("修改密码成功!");
		
	} catch (Exception e) {
		e.printStackTrace();
	} finally {
		close(ctx);
	}
}

执行后的结果:

uid=admin: javax.naming.directory.DirContext
prefNodeName=sysPrefRoot: javax.naming.directory.DirContext
ou=configuration: javax.naming.directory.DirContext
ou=consumers: javax.naming.directory.DirContext
ou=users: javax.naming.directory.DirContext
ou=groups: javax.naming.directory.DirContext
====list attributes =====
id=uid
admin

id=userPassword
[B@17f052a3

id=displayName
Directory Superuser

id=objectClass
top
person
organizationalPerson
inetOrgPerson

id=sn
administrator

id=cn
system administrator

当前的密码为:secre
修改密码成功!

再次执行后(由于没有修改密码):
在这里插入图片描述

javax.naming.AuthenticationException: [LDAP: error code 49 - INVALID_CREDENTIALS: Bind failed: ERR_229 Cannot authenticate user uid=admin,ou=system]
这个表示认证失败了,因为密码修改了

当修改了登录密码正确就可以继续访问了:
在这里插入图片描述

4. 总结

1. 通过修改配置文件方式修改端口时,必须要经过重启服务才会让配置重新生效

2. 修改密码操作时需要切换到不同的用户下面,且修改其中的密码属性即可,直接替换属性即可,如果使用DirContext.ADD_ATTRIBUTE那么表示该用户可以使用多个密码进行登录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值