gpt4 book ai didi

spring - 构建后如何将用户添加到 inMemoryAuthentication 构建器?

转载 作者:IT老高 更新时间:2023-10-28 13:48:05 27 4
gpt4 key购买 nike

在应用程序的初始加载期间,我已设法将所有用户加载到 AuthenticationManagerBuilder 中,但我需要在启动后添加用户。

启动:

public class WebSecurityConfig extends WebSecurityConfigurerAdapter

...

auth.inMemoryAuthentication().withUser(email).password(password).roles(roles.toArray(new String[roles.size()])).and().passwordEncoder(encoder());

这在某个时间点上效果很好,但我有一个用例可以在应用程序运行时添加用户。

我可以通过哪种方法在启动后执行此操作(通过 Controller /服务)?我想它可能是 InMemoryUserDetailsManager (它包含 createUser() 方法),但我不确定如何引用或配置它。

最佳答案

以下代码将满足您的要求:

@Configuration
@EnableWebMvcSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

@Override
protected void configure(HttpSecurity http) throws Exception {
//whatever here
}

@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.userDetailsService(inMemoryUserDetailsManager());
}

@Bean
public InMemoryUserDetailsManager inMemoryUserDetailsManager() {
final Properties users = new Properties();
users.put("user","pass,ROLE_USER,enabled"); //add whatever other user you need
return new InMemoryUserDetailsManager(users);
}

}

使用您在上面配置的 InMemoryUserDetailsManager 一个 super 简单的 Controller ,它只是添加并检查用户的存在,如下所示:

@RestController
@RequestMapping("user")
public class SimpleSecurityController {

private final InMemoryUserDetailsManager inMemoryUserDetailsManager;

@Autowired
public SimpleSecurityController(InMemoryUserDetailsManager inMemoryUserDetailsManager) {
this.inMemoryUserDetailsManager = inMemoryUserDetailsManager;
}

@RequestMapping("exists/{username}")
public boolean userExists(@PathVariable("username") String username ) {
return inMemoryUserDetailsManager.userExists(username);
}

@RequestMapping("add/{username}/{password}")
public String add(@PathVariable("username") String username, @PathVariable("password") String password) {
inMemoryUserDetailsManager.createUser(new User(username, password, new ArrayList<GrantedAuthority>()));
return "added";
}
}

另外请注意,如果您使用 Spring Boot 的自动配置,则需要添加

@EnableAutoConfiguration(exclude = SecurityAutoConfiguration.class)

防止 Spring Boot 尝试自动配置安全性

更新正如@AdamMichalik 所述,@EnableWebMvcSecurity 已弃用,应替换为 @EnableWebSecurity

关于spring - 构建后如何将用户添加到 inMemoryAuthentication 构建器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25869260/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com