Пользовательский тест фильтра безопасности Spring с MockMvc всегда возвращает 404 - PullRequest
0 голосов
/ 26 июня 2019

Я пытаюсь протестировать пользовательский фильтр, используя MockMvc, и он всегда возвращает статус 404 вместо фактического статуса, возвращаемого классом фильтра. Класс фильтра выглядит следующим образом:

    public class CustomFilter extends GenericFilterBean {

        @Override
        public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain chain)
            throws IOException, ServletException {

            HttpServletRequest request = (HttpServletRequest) servletRequest;
            // some logic 
            chain.doFilter(servletRequest, servletResponse);
        }
    }

Это зарегистрировано в SpringBootApplication с использованием FilterRegistrationBean

    @SpringBootApplication
    public class MyApplication {

        public static void main(String[] args) {
           try {
              ConfigurableApplicationContext ctx = SpringApplication.run(MyApplication.class, args);
           } catch (Throwable e) {
        }

        @Bean
        public FilterRegistrationBean<CustomFilter> customFilter() {
           FilterRegistrationBean<CustomFilter> filterRegistration = new FilterRegistrationBean<>();
           filterRegistration.setFilter(new CustomFilter());
           filterRegistration.addUrlPatterns("/test/*");
           return filterRegistration;
        }
    }

Тест для этого записывается следующим образом:

    @RunWith(SpringRunner.class)
    @SpringBootTest(CustomFilter.class)
    @EnableAutoConfiguration 
    @WebAppConfiguration
    public class CustomFilterTest {

        @Autowired
        private CustomFilter filter;

        @Autowired
        private WebApplicationContext context;

        private MockMvc mvc;

        @Before
        public void setup() {
            this.mvc = MockMvcBuilders.webAppContextSetup(context)
                 .addFilters(filter)
                 .build();
        }

        @Test
        public void testCustomFilter() throws Throwable {

           MockHttpServletRequestBuilder request = MockMvcRequestBuilders
                .request(HttpMethod.POST, "/resource/abc")
                .header("SomeHeader", "xxx")
                .content("{}");

           MockHttpServletResponse response = mvc.perform(request).andReturn().getResponse();

           assertEquals(response.getStatus(), HttpServletResponse.SC_CONTINUE);
        }
    }

Утверждение всегда возвращает значение состояния 404.

Я что-то здесь упускаю?

1 Ответ

0 голосов
/ 28 июня 2019

Добавьте urlPatterns к addFilter(filter, "/resource/abc") и добавьте тестовый контроллер для приведенного выше фрагмента кода следующим образом:

@RestController
public class TestController {

    @PostMapping("/resource/abc")
    public void testSecureEndpoint() {

    }
}
...