为了账号安全,请及时绑定邮箱和手机立即绑定

InMemoryUserDetailsManager updateUser 调用后未获取更新的密码

InMemoryUserDetailsManager updateUser 调用后未获取更新的密码

繁星点点滴滴 2024-01-05 09:50:55
您好,我有一个 Rest WS,使用 WebSecurityConfigurerAdapter 来实现 HTTP 基本身份验证。允许更新密码,我需要让 WS 在不重新启动服务器的情况下获取更新的密码以下是代码:安全配置// init a user with credentials admin/password@Configuration@EnableWebSecuritypublic class SecurityConfig extends WebSecurityConfigurerAdapter {    @Override    protected void configure(HttpSecurity http) throws Exception {        http                        //disable csrf                        .csrf().disable()                        //authentic all requests                        .authorizeRequests().anyRequest().authenticated().and().httpBasic()                        //disable session                        .and().sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS);    }    @Override    public void configure(AuthenticationManagerBuilder auth) throws Exception {        auth.userDetailsService(inMemoryUserDetailsManager());    }    @Bean    public InMemoryUserDetailsManager inMemoryUserDetailsManager() {        Properties users = new Properties();        users.put("admin", "password,USER,enabled");        return new InMemoryUserDetailsManager(users);    }}将更新密码的控制器@RestControllerpublic class someController{    @Autowired    public InMemoryUserDetailsManager inMemoryUserDetailsManager;    // update password from password -> pass    @RequestMapping(...)    public updatePass(){        ArrayList<GrantedAuthority> grantedAuthoritiesList = new ArrayList<>();        grantedAuthoritiesList.add(new SimpleGrantedAuthority("USER"));        this.inMemoryUserDetailsManager.updateUser(new User("admin", "pass", grantedAuthoritiesList));    }第一次使用凭据 admin/password 调用 updatePass() 后,我可以看到密码已在调试器中更新为“pass”我认为如果我要再次调用 updatePass() ,我应该使用admin/pass。然而事实证明仍在使用旧的admin/password。我在编写此代码时引用的来源source1 source2*我正在使用 Advance Rest Client 拨打电话
查看完整描述

2 回答

?
翻过高山走不出你

TA贡献1875条经验 获得超3个赞

当您更新密码时,如果用户经过身份验证,则必须在 springSecurityContext 对象中设置 UserDetails。



查看完整回答
反对 回复 2024-01-05
?
慕侠2389804

TA贡献1719条经验 获得超6个赞

我没有使用SecurityContext,而是覆盖了UserDetailsService接口的loadUserByUsername函数,让spring security始终从数据库获取最新的pwd。



查看完整回答
反对 回复 2024-01-05
  • 2 回答
  • 0 关注
  • 135 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信