У меня есть пользовательский initialzer, который расширяет AbstractSecurityWebApplicationInitializer
. Он добавляет пару фильтров в начало цепочки фильтров.Spring 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 load it) в среде тестирования интеграции. Вот фрагмент теста:
@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()
не вызывается во время теста. На данный момент я решил вручную добавить фильтры в цепочку фильтров теста. Но я думаю, что должно быть лучшее решение.
Пожалуйста, помогите сделать мир немного лучше :) Спасибо!
Я читал эту статью и уже попробовал ваш код :). Injected 'springSecurityFilterChain' действительно имеет все необходимые фильтры безопасности, кроме тех, что из' SecurityApplicationInitializer'. Я проверил: 'SecurityApplicationInitializer.beforeSpringSecurityFilterChain()' не получает вызов. –