在基于Spring Boot的应用程序中-为简单起见,我依靠InMemoryUserDetailsManager
通过UserDetailsServiceAutoConfiguration
进行Spring Web Security自动配置。
为此,我只是通过properties(.yml)设置了一个用户,如下所示:
spring.security.user:
name: whatever
password: xxx
roles: USER
我想随后通过在InMemoryUserDetailsManager
即createUser(UserDetails user)
上调用适当的方法,添加可能从其他来源读取的额外用户(属性或大约-编译时未知的确切值) (从接口UserDetailsManager
继承)。基本上在我的@Configuration
类bean中:
@Autowired // Spring will inject its newly created InMemoryUserDetailsManager
private UserDetailsManager userDetailsManager;
// Maybe some annotation like @PostConstruct maybe? but should be conditioned to the existence of the above UserDetailsManager - can I do this?
public void loadMyUsers() {
...
Collection<UserDetails> users; // my list of "users"/UserDetails
users.stream().forEach(userDetailsManager::createUser);
}
我已经看到了这个问题:How can I add users to the inMemoryAuthentication builder after it has been built?,但不幸的是,答案会导致我期望的其他方向,即通过提供一个REST端点来添加用户(第一个答案),或者通过“硬编码”来添加用户(第二个答案)。
可以这样做吗?
答案 0 :(得分:0)
Spring Boot启动后,您可以使用ApplicationRunner
or CommandLineRunner
执行一些代码,并在这些运行器中创建用户。
明智的代码,它看起来像:
@SpringBootApplication
public class MyApplication {
@Autowired
private UserDetailsManager userDetailsManager;
@Bean
public CommandLineRunner commandLineRunner(ApplicationContext ctx) {
return args -> {
User user=new User("Foo", "password", ......);
userDetailsManager.createUser(user);
};
}
public static void main(String[] args) {
SpringApplication.run(DangerApplication.class, args);
}
}