【发布时间】:2015-01-02 16:19:00
【问题描述】:
我有扩展 AbstractSecurityWebApplicationInitializer 的自定义初始化程序。它将几个过滤器添加到过滤器链的开头。
@Order(2)
public class SecurityApplicationInitializer extends AbstractSecurityWebApplicationInitializer {
@Override
protected void beforeSpringSecurityFilterChain(ServletContext servletContext) {
CharacterEncodingFilter characterEncodingFilter = new CharacterEncodingFilter();
characterEncodingFilter.setEncoding(StandardCharsets.UTF_8.name());
characterEncodingFilter.setForceEncoding(true);
HiddenHttpMethodFilter hiddenHttpMethodFilter = new HiddenHttpMethodFilter();
insertFilters(servletContext, characterEncodingFilter, hiddenHttpMethodFilter);
}
}
在生产中它按预期工作。但是我不能让它在集成测试环境中启动(或者更好地说:让 Spring 加载它)。 这是测试的sn-p:
@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration
@ContextConfiguration(classes = {ApplicationConfiguration.class, FakeInMemoryMongoConfiguration.class, WebConfiguration.class})
@ActiveProfiles("test")
public class CarPartControllerIntegrationTest {
@Autowired
private WebApplicationContext wac;
private MockMvc mockMvc;
@Before
public void setUp() throws Exception {
mockMvc = webAppContextSetup(wac).build();
}
...
}
即,SecurityApplicationInitializer.beforeSpringSecurityFilterChain() 在测试期间未被调用。现在我决定在测试的过滤器链中手动添加过滤器。但我认为应该有更好的解决方案。
请帮助让世界变得更美好 :) 谢谢!
【问题讨论】:
标签: java spring spring-security integration-testing spring-test