Почему классы, расширяющие WebSecurityConfigurerAdapter и не декларирующие какой-либо bean-компонент, аннотируются конфигурацией? - PullRequest
1 голос
/ 04 февраля 2020

Согласно @ Документация по конфигурации :

Указывает, что класс объявляет один или несколько методов @Bean и может обрабатываться контейнером Spring для генерировать определения bean-компонентов и запросы на обслуживание для этих bean-компонентов во время выполнения, например:

@Configuration  
public class AppConfig {  
  @Bean  
  public MyBean myBean() {  
    //instantiate, configure and return bean ...  
  }  
}

Как я всегда помню, я сталкивался с классами, расширяющими WebSecurityConfigurerAdapter, которые не содержали никаких методов @Bean и были помечены @Configuration. Это даже в официальном блоге и некоторых примерах, см .: https://spring.io/blog/2013/07/03/spring-security-java-config-preview-web-security

@Configuration
@EnableWebSecurity
public class HelloWebSecurityConfiguration
   extends WebSecurityConfigurerAdapter {

  @Autowired
  public void configureGlobal(AuthenticationManagerBuilder auth) {
    auth
      .inMemoryAuthentication()
        .withUser("user").password("password").roles("USER");
  }
}

или здесь: https://docs.spring.io/spring-security/site/docs/current/reference/html/jc.html

    @Order(1)                                                        2
    public static class ApiWebSecurityConfigurationAdapter extends WebSecurityConfigurerAdapter {
        protected void configure(HttpSecurity http) throws Exception {
            http
                .antMatcher("/api/**")                               3
                .authorizeRequests(authorizeRequests ->
                    authorizeRequests
                        .anyRequest().hasRole("ADMIN")
                )
                .httpBasic(withDefaults());
        }
    }

Почему эти классы отмечены @Configuration, хотя @Bean методов нет?

1 Ответ

1 голос
/ 04 февраля 2020

Бины импортируются с использованием вторичной аннотации @Enable

Функции Spring, такие как выполнение асинхронного метода, выполнение запланированных задач, управление транзакциями на основе аннотаций и даже Spring MVC можно включить и настроить из классов @Configuration с помощью соответствующих аннотаций @Enable . Подробности смотрите в @ EnableAsyn c, @EnableScheduling, @EnableTransactionManagement, @EnableAspectJAutoProxy и @ EnableWeb Mvc.

из EnableWebSecurity :

Добавьте эту аннотацию в класс @Configuration, чтобы конфигурация Spring Security была определена в любом WebSecurityConfigurer или, что более вероятно, путем расширения базового класса WebSecurityConfigurerAdapter и переопределения отдельных методов:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...