Я сделал собственный фильтр и зарегистрировался в WebConfig, но когда я вызываю api, фильтр не вызывается. Я просмотрел журнал и, похоже, цепочка фильтров, которую я описал в конфигурации, не применяется. Однако я проверил, что WebConfig вызывается с помощью отладчика.
//MyFilter.java
@Component
public class MyFilter implements Filter {
@Override
doFilter(...) { // This part is NOT getting invoked
...
}
}
//WebConfig.java
@Configuration
public class WebConfig {
@Bean
public FilterRegistrationBean<MyFilter> myFilter() { // This part is getting invoked
regBean = new FilterRegistrationBean();
regBean.setFilter(new MyFilter());
regBean.setOrder(0);
return regBean;
}
}
//MyTest.java
@SpringBootTest
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = MyApplication.class)
public class MyTest {
private MockMvc mockMvc;
@Autowired
WebApplicationContext ctx;
@Before
public void before() {
mockMvc = MockMvcBuilders.webApplicationSetup(ctx).build();
}
@Test
public void doTest() {
mockMvc.perform(...);
}
}
1 ответ
this.mockMvc = MockMvcBuilders.webApplicationSetup(ctx)
.addFilters(filter).build();
Если вы не используете @AutoConfiguraMockMvc, вам необходимо добавить фильтры в конструктор mockMvc.
Что требуется, чтобы mockMVC тестировал процедуру инициализации фильтра?
Также здесь есть проблема с конфигурацией.
@Bean
public FilterRegistrationBean<MyFilter> myFilter(MyFilter myfilter) { // This part is getting invoked
regBean = new FilterRegistrationBean();
regBean.setFilter(myFilter);
regBean.setOrder(0);
return regBean;
}
Вы помещаете новый экземпляр фильтра в цепочку фильтров, но создаете одноэлементный фильтр. Вы можете использовать указанную выше конфигурацию.
FilterRegistrationBean
теперь он фактически добавляет 2 фильтра в цепочку. Однако при использовании @SpringBootTest
вы должны использовать @AutoConfigureMockMvc
, чтобы применить правильную конфигурацию фильтров и т. Д.
Похожие вопросы
Связанные вопросы
Новые вопросы
java
Java — это высокоуровневый объектно-ориентированный язык программирования. Используйте этот тег, если у вас возникли проблемы с использованием или пониманием самого языка. Этот тег часто используется вместе с другими тегами для библиотек и/или фреймворков, используемых разработчиками Java.
@ContextConfiguration
, добавьте@AutoConfigureMockMvc
. Откажитесь от аннотированного метода@Before
и добавьте@Autowired
в полеMockMvc
. Затем повторно запустите тест.@ContextConfiguration
вызываетIllegalStateException
, поэтому я не могу запустить тест без него.@SpringBootApplication
(если у вас нет какой-то странной нестандартной структуры упаковки). Не могли бы вы добавить исключение ( полную трассировку стека исключений ) в свой вопрос в качестве обновления.@ContextConfiguration(classes = MyApplication.class)
или@ContextConfiguration(classes = WebConfig.class)
или это просто пример, который вы разместили?