Apache DS:修改启动端口和使用java方式修改登录密码
Posted 你是小KS
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Apache DS:修改启动端口和使用java方式修改登录密码相关的知识,希望对你有一定的参考价值。
当前版本: apacheds-2.0.0.AM26
1. 声明
当前内容主要为学习和使用Apache DS,并完成修改端口和密码的操作,当前内容参考:官方文档
主要为:
- 手动修改启动端口 (修改10389为389)
- 使用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方式修改登录密码的主要内容,如果未能解决你的问题,请参考以下文章