如何在 Spring 中重置 LDAP 密码(忘记密码)
How to reset an LDAP password in Spring (Forgotten password)
在 Spring 启动 1.5.9
应用程序中,我重设了密码。使用令牌,我能够识别正在重置密码的用户。
这是我更新连接用户密码的方式:
public void updatePassword(User entity) {
if (null != entity.getOldPassword() && null != entity.getPassword()) {
userDetailsService.changePassword(entity.getOldPassword(), encrypt(entity.getPassword()));
}
}
我使用 LdapUserDetailsManager userDetailsService
,来自 spring security ldap 4.2.3.RELEASE
,我没有看到任何方法来重置我拥有 username
的用户的密码。
如何使用 username
(或 ldap 中的 uid
)重设密码?
解决方案在此 post:https://tech.wrighting.org/2013/06/06/using-the-ldap-password-modify-extended-operation-with-spring-ldap/
我是这样做的:
DistinguishedName dn = new DistinguishedName(dn_string);
Attribute passwordAttribute = new BasicAttribute(passwordAttr,
newPassword);
ModificationItem[] modificationItems = new ModificationItem[1];
modificationItems[0] = new ModificationItem(
DirContext.REPLACE_ATTRIBUTE, passwordAttribute);
/*
Attribute userPasswordChangedAttribute = new BasicAttribute(
LDAP_PASSWORD_CHANGE_DATE, format.format(convertToUtc(null)
.getTime()) + "Z");
ModificationItem newPasswordChanged = new ModificationItem(
DirContext.REPLACE_ATTRIBUTE, userPasswordChangedAttribute);
modificationItems[1] = newPasswordChanged;
*/
getLdapTemplate().modifyAttributes(dn, modificationItems);
我更喜欢这种方法,因为我使用的版本 spring security ldap 没有使用密码覆盖来更改密码,以便与其保持一致,否则,如果您使用的是更新的版本spring 安全 ldap,更喜欢第二种方式。
在 Spring 启动 1.5.9
应用程序中,我重设了密码。使用令牌,我能够识别正在重置密码的用户。
这是我更新连接用户密码的方式:
public void updatePassword(User entity) {
if (null != entity.getOldPassword() && null != entity.getPassword()) {
userDetailsService.changePassword(entity.getOldPassword(), encrypt(entity.getPassword()));
}
}
我使用 LdapUserDetailsManager userDetailsService
,来自 spring security ldap 4.2.3.RELEASE
,我没有看到任何方法来重置我拥有 username
的用户的密码。
如何使用 username
(或 ldap 中的 uid
)重设密码?
解决方案在此 post:https://tech.wrighting.org/2013/06/06/using-the-ldap-password-modify-extended-operation-with-spring-ldap/
我是这样做的:
DistinguishedName dn = new DistinguishedName(dn_string);
Attribute passwordAttribute = new BasicAttribute(passwordAttr,
newPassword);
ModificationItem[] modificationItems = new ModificationItem[1];
modificationItems[0] = new ModificationItem(
DirContext.REPLACE_ATTRIBUTE, passwordAttribute);
/*
Attribute userPasswordChangedAttribute = new BasicAttribute(
LDAP_PASSWORD_CHANGE_DATE, format.format(convertToUtc(null)
.getTime()) + "Z");
ModificationItem newPasswordChanged = new ModificationItem(
DirContext.REPLACE_ATTRIBUTE, userPasswordChangedAttribute);
modificationItems[1] = newPasswordChanged;
*/
getLdapTemplate().modifyAttributes(dn, modificationItems);
我更喜欢这种方法,因为我使用的版本 spring security ldap 没有使用密码覆盖来更改密码,以便与其保持一致,否则,如果您使用的是更新的版本spring 安全 ldap,更喜欢第二种方式。