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

您好,我有一个 Rest WS,使用 WebSecurityConfigurerAdapter 来实现 HTTP 基本身份验证。允许更新密码,我需要让 WS 在不重新启动服务器的情况下获取更新的密码以下是代码:


安全配置


// init a user with credentials admin/password

@Configuration

@EnableWebSecurity

public 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);

    }

}

将更新密码的控制器


@RestController

public 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”

https://img1.sycdn.imooc.com/6597609c0001990804850354.jpg

我认为如果我要再次调用 updatePass() ,我应该使用admin/pass。然而事实证明仍在使用旧的admin/password

我在编写此代码时引用的来源source1 source2

*我正在使用 Advance Rest Client 拨打电话


繁星点点滴滴
浏览 138回答 2
2回答

翻过高山走不出你

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

慕侠2389804

我没有使用SecurityContext,而是覆盖了UserDetailsService接口的loadUserByUsername函数,让spring security始终从数据库获取最新的pwd。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java