当前位置: 首页 > 知识库问答 >
问题:

如何在spring boot WebApplication中配置两个独立的过滤器?

花稳
2023-03-14

我试图在Spring Boot配置中使用FilterRegistrationBean添加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)

共有1个答案

吴腾
2023-03-14

Bean是按类型搜索的,对于这两个Bean,类型是相同的,所以这就是问题所在。

要解决这个问题,您可以添加@qualifier,通过bean名称来解决autowire。

或者,如果默认情况下应该使用一个Bean,您也可以将@primary添加到其中一个Bean中。

@Bean
@Primary
FilterRegistrationBean someFilterRegistration() {
  ...
}
@Bean
FilterRegistrationBean shareFilterRegistration() {
 ...
}
@Autowired
FilterRegistrationBean bean;

您可以自动连接一些FilterRegistration(),并通过执行以下操作

@Autowired
@Qualifier("shareFilterRegistration")
FilterRegistrationBean bean;

你会得到另一个的。

 类似资料:
  • 我想用这种设计实现spring boot应用程序的身份验证和授权: 第一组endpoint("/api/**)将通过请求标头传递api密钥来获得授权。应该允许所有人进行身份验证。 第二个组(/admin/**)将通过点击/loginendpoint来进行身份验证,该endpoint将传递用户名和密码,我将在其中拥有自定义的UserDetailService。如果身份验证良好,将返回令牌并用于授权其

  • 我试图设置一个独立的Spark2.0服务器来并行处理分析功能。为此,我希望有一个带有多个执行者的工作人员。 我在使用: 独立Spark 2.0 8核 24gig ram Windows server 2008 pyspark(尽管这看起来不相关)

  • 我的任务是比较一些当前时期的日志和旧的日志。例如——本周日志和前一周日志。但是当我创建这样的第二个轴时 我有一个空的部分,因为我所有的xAx都是“时间”类型的,并且点的时间不一样(这是绝对正常的行为)。我有这种情况 但是我需要制作独立的轴,例如:顶部轴开始于30sep,结束于3oct底部轴开始于7oxt,结束于10oct,它们的长度都相同 我试着创造这样的斧头 但是如果没有“ticks”属性,我会

  • 问题内容: 我正在尝试制作一个第三方的简单的独立/摇摆应用程序,该应用程序使用hibernate模式在另一个应用程序的数据库上进行连接,所以这是我所做的: 1-使用的jar: 2- hibernate.cfg.xml(位于src文件夹中): 3- SessionFactoryHelper: 4-样本查询: 运行该应用程序时,出现以下异常: 谁能告诉我我的配置出了什么问题? 问题答案: 这个问题与H

  • 我目前正在使用嵌入式neo4j运行我的webapp。现在我想换成独立的neo4j服务器。在考虑使用独立服务器时,我偶然发现了spring-data-neo4j。在使用SpringDataJPA并记住连接到db是多么容易之后,我开始寻找如何使用spring-data-neo4j的好教程。 这似乎可能与Spring-数据-neo4j-Rest。这就留下了一个问题,如何用java config配置它,而

  • 我试图添加一个过滤器,需要参数作为FilterConfig给出。我将它添加到WebApplication ation初始::onStartup(ServletContext容器)方法中,并且配置良好(init方法使用正确的FilterConfig调用)。 关键是我使用的是SpringSecurityWebSecurityConfigureAdapter,我的过滤器从未被调用过(不在过滤器链中)。如