我有一个 Java 应用程序,我希望每个用户都可以通过应用程序更改自己的密码。
这是我的代码:
public void changePassword()
{
LdapContextSource contextSource = new LdapContextSource();
contextSource.setUrl("LDAPS://X.Y.Z.T/");
contextSource.setBase("DC=example,DC=com");
contextSource.setUserDn("[email protected]");
contextSource.setPassword("oldpass");
contextSource.afterPropertiesSet();
LdapTemplate ldapTemplate = new LdapTemplate(contextSource);
byte[] li_byOldpass = encodePassword("oldpass");
byte[] li_byNewpass = encodePassword("newpass");
Attribute oldattr = new BasicAttribute("unicodePwd", li_byOldpass);
Attribute newattr = new BasicAttribute("unicodePwd", li_byNewpass);
ModificationItem olditem = new ModificationItem(DirContext.REMOVE_ATTRIBUTE, oldattr);
ModificationItem newitem = new ModificationItem(DirContext.ADD_ATTRIBUTE, newattr);
ModificationItem repitem = new ModificationItem(DirContext.REPLACE_ATTRIBUTE, newattr);
ModificationItem[] mods = new ModificationItem[2];
mods[0] = olditem;
mods[1] = newitem;
try
{
ldapTemplate.modifyAttributes("CN=Name Surname,OU=Office,DC=example,DC=com", new ModificationItem[] { repitem });
}catch(Exception e)
{
System.out.println("Error in changing password on Active Directory: " + e.getMessage() );
}
}
不幸的是它不起作用,这是我得到的错误:
[LDAP:错误代码 32 - 0000208D:NameErr:DSID-0310020A,问题 2001 (NO_OBJECT),数据 0,最佳匹配:'DC=example,DC=com'];
任何帮助将不胜感激
谢谢
这个答案是为了后代
检查此链接:http://www.baeldung.com/spring-ldap
代码示例:
@Autowired
private LdapTemplate ldapTemplate;
private static final String BASE_DN = "OU=Metaverse";
protected void buildDn(UserAd user) {
Name dn = LdapNameBuilder.newInstance(BASE_DN)
.add("OU", "Orga_Unit")
.add("OU", "Orga_Unit")
.add("CN", "ldap_cn").build();
DirContextAdapter context = new DirContextAdapter(dn);
context.setAttributeValues(
"objectclass",
new String[]
{ "top",
"person",
"organizationalPerson"});
context.setAttributeValue("sn", "CREATETEST");
context.setAttributeValue("userPassword","password");
ldapTemplate.bind(context);
}
您的基础已在 Spring LdapContextSource 中定义。 所以只需执行:
ldapTemplate.modifyAttributes("CN=Name Surname,OU=Office", new ModificationItem[] { repitem });
您需要在新密码之间添加双引号,然后将其转换为 UTF-16,如下所示:
String newPass = "\"" + password + "\"";
byte[] newPassUtf16 = newPass.getBytes("UTF-16LE");