在 Spring 引导应用程序中配置 Spring 安全性时,如何在没有 @Configuration 的 class 中使用 @Bean?
How @Bean is used in a class without @Configuration when configuring Spring Security in a Spring Boot app?
我正在了解 Spring 启动应用程序中的安全性。我知道您只需要在@Configuration class 中使用@Bean。但是我看到这个配置示例 Spring Security 并且 @Bean 在没有 @Configuration 的 class 中使用。这怎么可能?谢谢!
@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
不是强制性的 class:
@Bean methods may also be declared within classes that are not annotated with @Configuration. For example, bean methods may be declared in a @Component class or even in a plain old class.
如果你也看一下 @EnableWebSecurity
doc 你会发现它包括 @Configuration
.
编辑:提示
对于 Spring 引导应用程序,当我们使用 @EnableWebSecurity
时,我们会禁用安全性 auto-configuration,因此最好简单地执行以下操作:
@Configuration
// @Order(...) we can set the order of the filter chain
public class SecurityConfigurer extends WebSecurityConfigurerAdapter {
// configuration here
}
在这种情况下,我们保留 Spring Boot 提供的配置 + 我们自己的配置。
我正在了解 Spring 启动应用程序中的安全性。我知道您只需要在@Configuration class 中使用@Bean。但是我看到这个配置示例 Spring Security 并且 @Bean 在没有 @Configuration 的 class 中使用。这怎么可能?谢谢!
@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
不是强制性的 class:
@Bean methods may also be declared within classes that are not annotated with @Configuration. For example, bean methods may be declared in a @Component class or even in a plain old class.
如果你也看一下 @EnableWebSecurity
doc 你会发现它包括 @Configuration
.
编辑:提示
对于 Spring 引导应用程序,当我们使用 @EnableWebSecurity
时,我们会禁用安全性 auto-configuration,因此最好简单地执行以下操作:
@Configuration
// @Order(...) we can set the order of the filter chain
public class SecurityConfigurer extends WebSecurityConfigurerAdapter {
// configuration here
}
在这种情况下,我们保留 Spring Boot 提供的配置 + 我们自己的配置。