[英]Spring Boot Autowired Configuration Only Null When Validator Bean Used
[英]How @Bean is used in a class without @Configuration when configuring Spring Security in a Spring Boot app?
我正在 Spring Boot 應用程序中學習 Spring Security。 我知道您只需要在 @Configuration 類中使用 @Bean 。 但是我看到這個示例用於配置 Spring Security,@Bean 用於沒有 @Configuration 的類中。 這怎么可能? 謝謝!
@EnableWebSecurity
public class SecurityConfigurer extends WebSecurityConfigurerAdapter {
@Autowired
private MyUserDetailsService myUserDetailsService;
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.userDetailsService(myUserDetailsService);
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.csrf().disable()
.authorizeRequests().antMatchers("/authenticate").permitAll()
.anyRequest().authenticated();
}
@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
@Override
@Bean
public AuthenticationManager authenticationManagerBean() throws Exception {
return super.authenticationManagerBean();
}
}
當您遇到這種情況時,請查看文檔,這里@Bean文檔您可以看到在@Configuration
類中使用@Bean
不是強制性的:
@Bean 方法也可以在沒有用 @Configuration 注釋的類中聲明。 例如,bean 方法可以在 @Component 類中聲明,甚至可以在普通的舊類中聲明。
如果您還查看@EnableWebSecurity
文檔,您會發現它包含@Configuration
。
編輯:提示
對於 Spring Boot 應用程序,當我們使用@EnableWebSecurity
我們禁用了安全自動配置,因此最好簡單地執行以下操作:
@Configuration
// @Order(...) we can set the order of the filter chain
public class SecurityConfigurer extends WebSecurityConfigurerAdapter {
// configuration here
}
在這種情況下,我們保留 Spring Boot 提供的配置 + 我們自己的配置。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.