我做了一個自定義過濾器并在 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(...);
}
}
uj5u.com熱心網友回復:
this.mockMvc = MockMvcBuilders.webApplicationSetup(ctx)
.addFilters(filter).build();
如果您不使用 @AutoConfiguraMockMvc,則必須向 mockMvc 構建器添加過濾器。
使 mockMVC 測驗過濾器的 init 例程需要什么?
這里還有一個配置問題。
@Bean
public FilterRegistrationBean<MyFilter> myFilter(MyFilter myfilter) { // This part is getting invoked
regBean = new FilterRegistrationBean();
regBean.setFilter(myFilter);
regBean.setOrder(0);
return regBean;
}
您將過濾器的新實體放入過濾器鏈,但您創建了單例過濾器。您可以使用上述配置。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/360707.html
