authenticationManager 多个
时间: 2023-08-12 13:05:44 浏览: 80
如果你想在你的应用程序中使用多个 authenticationManager,可以在你的 WebSecurityConfigurerAdapter 类中创建多个 AuthenticationManagerBean 方法,并在每个方法中定义不同的身份验证机制。然后,你可以在你的 WebSecurityConfigurerAdapter 类的 configure 方法中使用 authenticationManager() 方法来选择使用哪个身份验证机制。例如,以下代码演示了如何创建两个身份验证机制并在 configure 方法中使用它们:
```java
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Bean
public AuthenticationManager authenticationManagerUser() throws Exception {
return authenticationManagerBuilder()
.userDetailsService(userDetailsService())
.passwordEncoder(passwordEncoder())
.and()
.build();
}
@Bean
public AuthenticationManager authenticationManagerAdmin() throws Exception {
return authenticationManagerBuilder()
.userDetailsService(adminDetailsService())
.passwordEncoder(passwordEncoder())
.and()
.build();
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/admin/**").hasRole("ADMIN")
.antMatchers("/user/**").hasRole("USER")
.and()
.formLogin();
}
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth
.parentAuthenticationManager(authenticationManagerUser())
.inMemoryAuthentication()
.withUser("admin").password("{noop}admin").roles("ADMIN");
}
}
```
在这个例子中,我们创建了两个 AuthenticationManagerBean 方法,分别用于用户身份验证和管理员身份验证。在 configure 方法中,我们使用了这两个身份验证机制来授权用户访问不同的端点。注意,我们使用 parentAuthenticationManager 方法来将用户身份验证机制设置为管理员身份验证机制的父身份验证器,并使用 inMemoryAuthentication 方法来为管理员创建一个用户。
阅读全文