Я хотел бы настроить фильтр сервлета в веб-приложении 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 по классу основного приложения.