我试图在Spring引导配置中使用FilterRegistrationBean添加2个单独的过滤器。如何在spring boot webapplication中配置2个独立的过滤器?
这是我的2个过滤器的实现。
@Bean
public FilterRegistrationBean someFilterRegistration() {
FilterResgistrationAccess registration = new FilterResgistrationAccess();
registration.setFilter(new FeatureAccessFilter());
registration.addUrlPatterns("/api/*");
registration.setName("featureAccessFilter");
registration.addInitParameter("paramName", "paramValue");
registration.setOrder(1);
return registration;
}
@Bean
public FilterRegistrationBean shareFilterRegistration() {
FilterResgistrationShare registration = new FilterResgistrationShare();
registration.setFilter(new ShareAccessFilter());
registration.addUrlPatterns("/content_external/*");
registration.setName("shareAccessFilter");
registration.setOrder(2);
return registration;
}
但它给出了以下错误并未能启动应用程序上下文。 请让我知道我该如何做到这一点。
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'featureAccessFilter': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private org.springframework.boot.context.embedded.FilterRegistrationBean com.beroe.insync2.config.FeatureAccessFilter.filterRegistrationBean; nested exception is org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type [org.springframework.boot.context.embedded.FilterRegistrationBean] is defined: expected single matching bean but found 2: someFilterRegistration,shareFilterRegistration at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:334)
看起来Spring在创建FeatureAccessFilter实例时失败了。请张贴相同的代码。正如@guchuan所建议的那样,使用限定符来定义并注入相同类型的bean –