CORS перестает работать после регистрации фильтра - PullRequest
0 голосов
/ 26 мая 2020

У меня есть глобальный конфигуратор cors:

@Bean
public WebMvcConfigurer corsConfigurer()
{
    return new WebMvcConfigurer()
    {
        @Override
        public void addCorsMappings(CorsRegistry registry)
        {
            registry.addMapping("/**")
                    .allowedHeaders("*")
                    .allowedMethods("*")
                    .allowedOrigins(...);
        }
    };
}

Проблема в том, что как только я добавляю фильтр:

@Bean
FilterRegistrationBean<SomeFilter> someFilter()
{
    FilterRegistrationBean<SomeFilter> someFilter = new FilterRegistrationBean<>();
    someFilter.setFilter(new SomeFilter());
    someFilter.addUrlPatterns("/*");
    return someFilter;
}

private static class SomeFilter implements Filter
{
    @Override
    public void doFilter(ServletRequest req, ServletResponse res, FilterChain next) throws IOException, ServletException
    {
        HttpServletRequest httpReq = (HttpServletRequest) req;

        String test = httpReq.getHeader("test");

        if (test == null || !test.equals("ok"))
        {
            HttpServletResponse httpRes = (HttpServletResponse) res;
            httpRes.setStatus(403);
            return;
        }

        next.doFilter(req, res);
    }
}

CORS перестает работать. Я предполагаю, что это происходит потому, что мой фильтр возвращает запрос до добавления заголовков CORS.

UPDATE # 1:

I решил мою проблему, добавив:

if (httpReq.getMethod().equals("OPTIONS"))
{
    next.doFilter(req, res);
    return;
}

в самое начало моих фильтров. Не уверен, что это правильный подход.

ОБНОВЛЕНИЕ # 2:

Приведенное выше решение неверно, заголовки CORS должны быть на каждый ответ, а не только на OPTIONS, Заголовки CORS присутствуют только при предпечатной проверке или при каждом запросе

...