Уважаемое сообщество: я пишу это, чтобы спросить, как мне настроить AuthenticationManagerBuilder .
@Configuration
@EnableWebSecurity
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
@Autowired
private UserDetailsService secUserDetailsService;
@Autowired
private PasswordEncoder secPasswordEncoder;
. . .
@Bean
@Override
public AuthenticationManager authenticationManagerBean() throws Exception {
return super.authenticationManagerBean();
}
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.authenticationProvider(authenticationProvider());
}
@Autowired
public void globalUserDetails(AuthenticationManagerBuilder auth) throws Exception {
auth.userDetailsService(secUserDetailsService).passwordEncoder(secPasswordEncoder);
}
@Bean
public DaoAuthenticationProvider authenticationProvider() {
DaoAuthenticationProvider authenticationProvider = new DaoAuthenticationProvider();
authenticationProvider.setUserDetailsService(secUserDetailsService);
authenticationProvider.setPasswordEncoder(secPasswordEncoder);
return authenticationProvider;
}
}
Какая реализация должна быть в промежутке между
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.authenticationProvider(authenticationProvider());
}
и
@Autowired
public void globalUserDetails(AuthenticationManagerBuilder auth) throws Exception {
auth.userDetailsService(secUserDetailsService).passwordEncoder(secPasswordEncoder);
}
Кроме того, я обнаружил, что если я прокомментирую метод '@ Override protected void configure (AuthenticationManagerBuilder auth) , мое приложение будет работать хорошо, но когда я прокомментировал @Autowired publi c void globalUserDetails (AuthenticationManagerBuilder auth) , произошла следующая ошибка:
o.s.s.o.p.endpoint.TokenEndpoint.handleException:169 - Handling error: IllegalStateException, UserDetailsService is required.
java.lang.IllegalStateException: UserDetailsService is required.
at org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter$UserDetailsServiceDelegator.loadUserByUsername(WebSecurityConfigurerAdapter.java:464)
at org.springframework.security.core.userdetails.UserDetailsByNameServiceWrapper.loadUserDetails(UserDetailsByNameServiceWrapper.java:68)
at org.springframework.security.web.authentication.preauth.PreAuthenticatedAuthenticationProvider.authenticate(PreAuthenticatedAuthenticationProvider.java:103)
at org.springframework.security.authentication.ProviderManager.authenticate(ProviderManager.java:175)
...
Какой метод мне следует использовать? Кроме того (это моя самая большая проблема) есть ли проблемы с производительностью , если я использую оба?