LDAP 修改密码报错
在ldap上使用Java代码直接修改对应的principle密码时候出现
LDAPException: Unwilling To Perform (53) Unwilling To Perform
LDAPException: Server Message: 0000001F: SvcErr: DSID-031A12D2, problem 5003 (WILL_NOT_PERFORM), data 0
LDAPException: Matched DN:
at com.novell.ldap.LDAPResponse.getResultException(LDAPResponse.java:407)
at com.novell.ldap.LDAPResponse.chkResultCode(LDAPResponse.java:370)
at com.novell.ldap.LDAPConnection.chkResultCode(LDAPConnection.java:3959)
at com.novell.ldap.LDAPConnection.modify(LDAPConnection.java:2712)
at com.novell.ldap.LDAPConnection.modify(LDAPConnection.java:2641)
at com.novell.ldap.LDAPConnection.modify(LDAPConnection.java:2607)
Java代码
public LDAPConnection getUNSecurity(LdapEnvPO ldapEnvPO) {
LDAPConnection lcUNSecurity = new LDAPConnection();
int ldapVersion = LDAPConnection.LDAP_V3;
int ldapPort = LDAPConnection.DEFAULT_PORT; //这个主机是port 389
try {
log.info("开始非安全进行链接");
lcUNSecurity.connect("主机ip", ldapPort);
lcUNSecurity.bind(ldapVersion, "对应的ldap的主机的用户和域,注意不是主机名,是你的登录用户 hadoop@tom.com", "登录密码".getBytes("UTF8"));
log.info("新的ldap非安全链接成功====》》》connect success!!");
return lcUNSecurity;
} catch (LDAPException | UnsupportedEncodingException e) {
e.printStackTrace();
return null;
}
}
这种方式会一直报上面的错误,大部分都是说密码问题
解决方法
上方的链接是389端口属于明文链接 其实在修改密码时候你需要修改问加密的密文所以需要SSL链接,这时候端口使用默认636即可
代码修改为
public LDAPConnection getUNSecurity(LdapEnvPO ldapEnvPO) {
LDAPConnection lcUNSecurity = new LDAPConnection();
int ldapVersion = LDAPConnection.LDAP_V3;
int ldapPort = LDAPConnection.DEFAULT_SSL_PORT; //这个主机是port 636
try {
log.info("开始非安全进行链接");
lcUNSecurity.connect("主机ip", ldapPort);
lcUNSecurity.bind(ldapVersion, "对应的ldap的主机的用户和域,注意不是主机名,是你的登录用户 hadoop@tom.com", "登录密码".getBytes("UTF8"));
log.info("新的ldap非安全链接成功====》》》connect success!!");
return lcUNSecurity;
} catch (LDAPException | UnsupportedEncodingException e) {
e.printStackTrace();
return null;
}
}
修改成功再次请求修改密码接口