gpt4 book ai didi

java - Spring AbstractSecurityWebApplicationInitializer 未在集成测试中启动

转载 作者:行者123 更新时间:2023-11-30 08:18:06 25 4
gpt4 key购买 nike

我有扩展 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 加载它)。这是测试的片段:

@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() 在测试期间未被调用。现在我决定在测试的过滤器链中手动添加过滤器。但我认为应该有更好的解决方案。

请帮助让世界变得更美好 :) 谢谢!

最佳答案

如果您使用 MockMvc,则需要为您的测试配置 Spring Security。您可以注入(inject)过滤器链,然后使用构建器模式添加它。

这篇博文详细描述了如何设置它以及使用 Spring Security 的不同测试选项。 http://spring.io/blog/2014/05/23/preview-spring-security-test-web-security

对于您的具体示例,您可以这样做:

@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration
@ContextConfiguration(classes = {ApplicationConfiguration.class, FakeInMemoryMongoConfiguration.class, WebConfiguration.class})
@ActiveProfiles("test")
public class CarPartControllerIntegrationTest {
@Autowired
private WebApplicationContext wac;

@Autowired
private Filter springSecurityFilterChain;

private MockMvc mockMvc;

@Before
public void setUp() throws Exception {
mockMvc = MockMvcBuilders
.webAppContextSetup(wac)
.addFilters(springSecurityFilterChain)
.build();
}
}

关于java - Spring AbstractSecurityWebApplicationInitializer 未在集成测试中启动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27745106/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com