【问题标题】:Update password in ldap using java使用java更新ldap中的密码
【发布时间】:2020-04-27 10:14:03
【问题描述】:

我正在使用 spring ldapcontextsource + java 与 AD 交互。当我使用新密码创建用户帐户时,一切正常。代码如下

context.setAttributeValue("unicodePwd", AD.getUnicodePwd(persona.getPassword()));

但是,当我尝试使用上面相同的代码更新使用密码时,出现以下错误:

[LDAP: 错误代码 20 - 0000207E: AtrErr: DSID-031906FC, #1: 0: 0000207E: DSID-031906FC, 问题 1006 (ATT_OR_VALUE_EXISTS), 数据 0, Att 9005a (unicodePwd)];嵌套异常是 javax.naming.directory.AttributeInUseException: [LDAP: 错误代码 20 - 0000207E: AtrErr: DSID-031906FC, #1: 0: 0000207E: DSID-031906FC, 问题 1006 (ATT_OR_VALUE_EXISTS), 数据 0, Att 9005a (unicodePwd ) ];剩余名称 'CN=brian_2 brian_2,OU=Test Group,OU=Organization Users,OU=ICE Accounts,DC=vetasi,DC=stage'

此外,我尝试了以下代码。用户密码设置成功,但新密码无法登录,旧密码仍然有效

context.setAttributeValue("userPassword", persona.getPassword());

最后,我使用下面的代码来修改上下文

ldapTemplate.modifyAttributes(context);

【问题讨论】:

  • 更新密码需要用到 // 执行更新 ctx.modifyAttributes(theUserName, mods);
  • @dassum 我更新了我的帖子。是的,我使用了 ldapTemplate.modifyAttributes(context);在最后。

标签: java ldap spring-ldap


【解决方案1】:

你可以这样做

ModificationItem item = new ModificationItem(DirContext.REPLACE_ATTRIBUTE, new BasicAttribute(passwordKey, ("\""+password+"\"").getBytes(StandardCharsets.UTF_16LE)));
                ldapTemplate.modifyAttributes(name, new ModificationItem[]{item});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-02-29
    • 1970-01-01
    • 2019-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-06
    相关资源
    最近更新 更多