Слишком много всего происходит для меня, но я думаю, что это просто тот случай, когда вы не можете одновременно создавать и вводить один и тот же компонент в одном классе.
Т.е.
@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
private UserDetailsService userDetailsService;
@Bean
public UserDetailsService userDetailsService() {...}
}
не будет работать.Подумайте об этом, вам нужно UserDetailsService
, чтобы создать класс, который должен создать UserDetailsService
.Как это сработает?
Вместо этого вы можете сделать следующее:
@EnableWebSecurity
@ComponentScan("com")
@Configuration
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Bean
public UserDetailsService userDetailsService() {
return super.userDetailsService();
}
@Bean
public DaoAuthenticationProvider getDaoAuthenticationProvider() {
DaoAuthenticationProvider authProvider = new DaoAuthenticationProvider();
//call the userDetailsService() method here
authProvider.setUserDetailsService(userDetailsService());
authProvider.setPasswordEncoder(this.passwordEncoder());
return authProvider;
}
...
}
Хотя это выглядит странно, оно делает правильные вещи.Spring проксирует все вызовы методов, поэтому, когда вы, по-видимому, вызываете userDetailsService()
напрямую, он фактически вводит соответствующий бин.