如何在更改用户密码时重新配置springboot的内存内身份验证?

iecba09b  于 2021-09-29  发布在  Java
关注(0)|答案(2)|浏览(110)

我正在使用SpringBootV2.4.2来承载一些基于jax-rs(jersey)的RESTAPI。这些API使用spring的内存身份验证程序(即通过扩展 WebSecurityConfigurerAdapter .
下面是代码片段:

@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
    PasswordEncoder encoder = PasswordEncoderFactories.createDelegatingPasswordEncoder();
    auth.inMemoryAuthentication()
        .withUser(username)
        .password(encoder.encode(passwd));
}

现在的问题是,如果用户(在本例中为管理员)更新其密码,如何更新内存中的身份验证机制。我允许用户在登录后使用默认用户名/密码(仅管理员知道)更新密码。
如何将代码流/事件返回到 configure(AuthenticationManagerBuilder auth) 方法使用新密码?
谢谢

tvmytwxo

tvmytwxo1#

这个 InMemoryUserDetailsManager 实现两个接口: UserDetailsManagerUserDetailsPasswordService .
这两个接口有两种方法: changePasswordupdatePassword 分别地您可以插入其中任何一个,并使用其实现更改用户的密码。

@Autowired
private UserDetailsManager userDetailsManager;

public void changePassword(String oldPassword, String newPassword) {
    this.userDetailsManager.changePassword(oldPassword, newPassword);
}

详情请参阅 InMemoryUserDetailsManager 实施

pengsaosao

pengsaosao2#

我建议您将密码设置在通常获取密码的位置,然后刷新主体。方法:更新密码,注销用户并再次登录。在更改密码之后强制用户再次登录可能是公平的,如果Auth&AuthIn被内置,这是常见的做法。

相关问题