簡體   English   中英

在 Spring Boot 應用程序中配置 Spring Security 時,如何在沒有 @Configuration 的類中使用 @Bean?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM