构建后,如何将用户添加到inMemoryAuthentication构建器中?

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

启动:

public class WebSecurityConfig extends WebSecurityConfigurerAdapter

...

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

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

我可以通过哪种方法进行启动后(通过控制器/服务)?我想可能是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上面配置的超级简单控制器,该控制器仅添加并检查用户的存在,如下所示:

@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

以上是 构建后,如何将用户添加到inMemoryAuthentication构建器中? 的全部内容, 来源链接: utcz.com/qa/432175.html

回到顶部