開始我有自定義initialzer延伸AbstractSecurityWebApplicationInitializer
。它在過濾器鏈的開始處添加了一些過濾器。春天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()
沒有在測試過程中調用。現在我決定在測試的過濾鏈中手動添加過濾器。但我認爲應該有更好的解決方案。
請幫助讓世界變得更好:)謝謝!
我讀過那篇文章,並已經嘗試過你的代碼:)。注入的'springSecurityFilterChain'確實有所有需要的安全過濾器,除了那些來自'SecurityApplicationInitializer'的安全過濾器。我檢查了'SecurityApplicationInitializer.beforeSpringSecurityFilterChain()'沒有被調用。 –