aka*_*_sh 3 java spring integration-testing spring-security spring-test
我有自定义初始值设定项,它扩展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);
}
}
Run Code Online (Sandbox Code Playgroud)
在生产中,它按预期工作。但是我不能让它在集成测试环境中启动(或者更好地说:让 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();
}
...
}
Run Code Online (Sandbox Code Playgroud)
即,SecurityApplicationInitializer.beforeSpringSecurityFilterChain()在测试期间不调用。现在我决定在测试的过滤器链中手动添加过滤器。但我认为应该有更好的解决方案。
请帮助让世界变得更好:)谢谢!
如果您使用 MockMvc,则需要为您的测试配置 Spring Security。您可以注入过滤器链,然后使用构建器模式添加它。
这篇博文详细描述了如何设置它以及使用 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();
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1002 次 |
| 最近记录: |