4

Я хотел бы настроить фильтр сервлета в веб-приложении Spring Boot, и я хотел бы автоподготовку некоторых компонентов и свойств с помощью аннотации @Value. Я был в состоянии добиться этого с помощью следующих конфигураций:Сервлет-фильтр как компонент Весенняя загрузка

@Configuration 
    public class MyWebConfig{ 
     @Autowire 
     MyFilter filter; 

     @Autowire 
     MyAnotherFilter anotherFilter; 

     @Bean 
     public FilterRegistrationBean someFilterRegistration() { 
      FilterRegistrationBean registration = new FilterRegistrationBean(); 
      registration.setFilter(filter); 
      registration.setOrder(1); 
      return registration; 
     } 

     @Bean 
     public FilterRegistrationBean someFilterRegistration() { 
      FilterRegistrationBean registration = new FilterRegistrationBean(); 
      registration.setFilter(anotherFilter); 
      registration.setOrder(2); 
      return registration; 
     } 

    } 

И я настроил оба фильтра (показывая только один фильтр для краткости):

@Configuration 
public class MyFilter implements Filter{ 

    @Value("${my.property.key}") 
    private String myProperty; 

    public void doFilter(...){ 
     .... 
    } 

    //init and destroy stubs 
     ....  
} 

Все работает отлично. Еще есть несколько вопросов:
1) Он работает, даже когда я комментирую фрагмент кода FilterRegistrationBean. Я чувствую, что должен использовать FilterRegistrationBean, если я хочу установить определенный порядок. Верный?
2) Есть ли способ установить порядок или другую конфигурацию, например, шаблоны url без FilterRegistrationBean?
3) Я считаю, что я могу использовать @Component, может заменить аннотацию @Configuration на класс Filter, и она будет работать правильно?
4) И, наконец, хорошо ли иметь класс фильтра, отмеченный как @ Component/@ Configuration?

Обратите внимание, что я использую @SpringBootApplication по классу основного приложения.

ответ

4

1) Он работает, даже если я прокомментирую фрагмент кода FilterRegistrationBean. Я чувствую, что должен использовать FilterRegistrationBean, если я хочу установить определенный порядок. Верный?

Это работает, потому что любые бобы Filter автоматически регистрируются с некоторой конфигурацией по умолчанию, если вы не предоставили явный регистрационный компонент.

2) Есть ли способ, которым я могу установить порядок или другую конфигурацию, например, шаблоны URL-адресов без FilterRegistrationBean?

Вы можете установить порядок с помощью @Order на вашем Filter или иметь его реализации Ordered.

Вы должны использовать регистрационный боб, если вы хотите установить шаблон URL

3) Я считаю, что я могу использовать @Component может заменить @Configuration аннотации класса фильтра, и он будет работать правильно?

Исправить. Ваш фильтр не конфигурация поэтому она должна быть аннотированный с @Component, а не @Configuration

4) И, наконец ли это хорошо иметь сам фильтр класса отмечен как @ Component/@ конфигурации?

Да, это замечательно, чтобы аннотировать фильтр с помощью @Component. Альтернативой может быть использование метода @Bean класса @Configuration.