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

Posted 你是小KS

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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[]替换,但是修改后却变成了SSHAXXX

实现如下:

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那么表示该用户可以使用多个密码进行登录

以上是关于Apache DS:修改启动端口和使用java方式修改登录密码的主要内容,如果未能解决你的问题,请参考以下文章

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

修改apache tomcat默认启动端口为80

修改apache tomcat默认启动端口为80

修改apache tomcat默认启动端口为80

xampp apache无法启动

如何修改Apache默认的80端口