如何在更改用户密码时重新配置 SpringBoot 的内存中身份验证?
How to reconfigure SpringBoot's in-memory authentication on change of user's password?
我正在使用 SpringBoot v2.4.2 来托管一些基于 JAX-RS(泽西岛)的 REST API。这些 API 使用 Spring 的内存中身份验证器进行保护(BASIC 身份验证),即通过扩展 WebSecurityConfigurerAdapter
.
下面是代码片段:
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
PasswordEncoder encoder = PasswordEncoderFactories.createDelegatingPasswordEncoder();
auth.inMemoryAuthentication()
.withUser(username)
.password(encoder.encode(passwd));
}
现在的问题是,如果用户(在本例中为管理员)更新 his/her 密码,我该如何更新此内存中身份验证机制。我确实允许用户在使用默认 username/password 登录后更新密码(只有管理员知道)。
如何将代码 flow/event 返回到 configure(AuthenticationManagerBuilder auth)
方法以使用新密码?
谢谢。
我建议在您通常获取密码的地方设置密码,然后刷新主体。意思是:更新密码,注销用户并重新登录。考虑强制用户在更改密码后重新登录可能是公平的——如果内置 auth&auth,这是常见的做法。
InMemoryUserDetailsManager
实现了两个接口:UserDetailsManager
和UserDetailsPasswordService
。
这两个接口分别有两个方法:changePassword
和updatePassword
。您可以注入它们中的任何一个并使用其实现来更改用户的密码。
@Autowired
private UserDetailsManager userDetailsManager;
public void changePassword(String oldPassword, String newPassword) {
this.userDetailsManager.changePassword(oldPassword, newPassword);
}
InMemoryUserDetailsManager
implementation 中有更多详细信息。
我正在使用 SpringBoot v2.4.2 来托管一些基于 JAX-RS(泽西岛)的 REST API。这些 API 使用 Spring 的内存中身份验证器进行保护(BASIC 身份验证),即通过扩展 WebSecurityConfigurerAdapter
.
下面是代码片段:
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
PasswordEncoder encoder = PasswordEncoderFactories.createDelegatingPasswordEncoder();
auth.inMemoryAuthentication()
.withUser(username)
.password(encoder.encode(passwd));
}
现在的问题是,如果用户(在本例中为管理员)更新 his/her 密码,我该如何更新此内存中身份验证机制。我确实允许用户在使用默认 username/password 登录后更新密码(只有管理员知道)。
如何将代码 flow/event 返回到 configure(AuthenticationManagerBuilder auth)
方法以使用新密码?
谢谢。
我建议在您通常获取密码的地方设置密码,然后刷新主体。意思是:更新密码,注销用户并重新登录。考虑强制用户在更改密码后重新登录可能是公平的——如果内置 auth&auth,这是常见的做法。
InMemoryUserDetailsManager
实现了两个接口:UserDetailsManager
和UserDetailsPasswordService
。
这两个接口分别有两个方法:changePassword
和updatePassword
。您可以注入它们中的任何一个并使用其实现来更改用户的密码。
@Autowired
private UserDetailsManager userDetailsManager;
public void changePassword(String oldPassword, String newPassword) {
this.userDetailsManager.changePassword(oldPassword, newPassword);
}
InMemoryUserDetailsManager
implementation 中有更多详细信息。