【问题标题】:Custom filter not injected in Spring integration test在 Spring 集成测试中未注入自定义过滤器
【发布时间】:2015-10-28 17:29:11
【问题描述】:

我有一个旨在启动我的 Spring Boot 应用程序的集成测试:

@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = AppConfigCorrelationIdTestIt.class)
@WebIntegrationTest("server.port:0")
public class CorrelationIdTestIT {

配置类在哪里:

@EnableConfigurationProperties
@ComponentScan
@EnableAutoConfiguration
@Configuration
public class AppConfigCorrelationIdTestIt {

在应用程序中,我有一个定义的自定义 servlet 过滤器:

public class CorrelationHeaderFilter implements Filter {

但是在测试我的应用时,我发现客户过滤器没有被实例化并注入到过滤器链中。我发现解决这个问题的唯一方法是在AppConfigCorrelationIdTestIt 中手动将其创建为 bean,然后它就可以完美运行了。

@Bean
public CorrelationHeaderFilter correlationHeaderFilter() {
    return new CorrelationHeaderFilter();
}

任何想法为什么 Spring Boot 在应用程序启动时没有选择过滤器?

谢谢

【问题讨论】:

  • 对过滤器不太了解...但是其他组件应该用“组件”或“服务”注解才能找到。
  • 嘿!您找到解决方案了吗?

标签: spring filter integration-testing


【解决方案1】:

通常,在配置 MockMvc 时,可以在测试类中使用 DefaultMockMvcBuilder.addFilter(Filter filter, String... urlPatterns)。例如:

@WebAppConfiguration
@ContextConfiguration
public class AuthenticationTest {

private static final String TOKEN_HEADER = "X-Firebase-Auth";

final String url = "http://localhost:8080/authentication";

final Logger logger = LoggerFactory.getLogger(AuthenticationTest.class);

@Autowired
private WebApplicationContext webApplicationContext;

@Autowired
public Filter springSecurityFilterChain;

private MockMvc mockMvc;

@Before
public void setUp(){
    mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext)
            .addFilter(springSecurityFilterChain).build();
}
...

}

我基于this answer

【讨论】:

  • 谢谢!为我解决遇到的同样问题节省了很多时间。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-04
  • 2011-04-20
相关资源
最近更新 更多