Servlet 过滤器作为组件 Spring 启动
Servlet Filter as Component Spring Boot
我想在 Spring 引导 Web 应用程序中配置 Servlet 过滤器,我想使用 @Value 注释自动装配一些 Bean 和属性。我能够使用以下配置实现此目的:
@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) 有什么方法可以在没有 FilterRegistrationBean 的情况下设置顺序或其他配置,例如 url 模式?
3) 我相信我可以使用 @Component 替换 Filter 上的 @Configuration 注释 class 并且它会正常工作?
4) 最后,将 Filter class 本身标记为 @Component/@Configuration 好吗?
请注意,我在主应用程序 class 上使用 @SpringBootApplication。
1) It works even when I comment out FilterRegistrationBean piece of code. I feel I must use FilterRegistrationBean if I want to set certain order. Correct?
之所以有效,是因为任何 Filter
bean 都会自动注册一些默认配置,除非您提供了显式注册 bean。
2) Is there any way I can set order or other configuration like url patterns without FilterRegistrationBean?
您可以通过在 Filter
上使用 @Order
或让它实现 Ordered
.
来设置顺序
如果您想设置 URL 模式,您应该使用注册 bean
3) I believe I can use @Component can replace @Configuration annotation on Filter class and it will work correctly?
正确。您的过滤器不是配置,因此应使用 @Component
而不是 @Configuration
进行注释
4) And finally Is it good to have Filter class itself marked as @Component/@Configuration?
是的,可以用 @Component
注释过滤器。另一种方法是在 @Configuration
class.
上使用 @Bean
方法
我想在 Spring 引导 Web 应用程序中配置 Servlet 过滤器,我想使用 @Value 注释自动装配一些 Bean 和属性。我能够使用以下配置实现此目的:
@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) 有什么方法可以在没有 FilterRegistrationBean 的情况下设置顺序或其他配置,例如 url 模式?
3) 我相信我可以使用 @Component 替换 Filter 上的 @Configuration 注释 class 并且它会正常工作?
4) 最后,将 Filter class 本身标记为 @Component/@Configuration 好吗?
请注意,我在主应用程序 class 上使用 @SpringBootApplication。
1) It works even when I comment out FilterRegistrationBean piece of code. I feel I must use FilterRegistrationBean if I want to set certain order. Correct?
之所以有效,是因为任何 Filter
bean 都会自动注册一些默认配置,除非您提供了显式注册 bean。
2) Is there any way I can set order or other configuration like url patterns without FilterRegistrationBean?
您可以通过在 Filter
上使用 @Order
或让它实现 Ordered
.
如果您想设置 URL 模式,您应该使用注册 bean
3) I believe I can use @Component can replace @Configuration annotation on Filter class and it will work correctly?
正确。您的过滤器不是配置,因此应使用 @Component
而不是 @Configuration
4) And finally Is it good to have Filter class itself marked as @Component/@Configuration?
是的,可以用 @Component
注释过滤器。另一种方法是在 @Configuration
class.
@Bean
方法