Выборка Javascript дважды вызывает бэкэнд

У меня есть бэкэнд-приложение, написанное на java ee и джерси. Когда я отправляю данные в конечную точку отдыха, используя JavaScript Fetch API, я вижу, что фильтр срабатывает дважды. Если у него нет заголовка авторизации, во-вторых, он есть. Когда я пытаюсь открыть свой сайт из веб-браузера, этот фильтр вызывается только один раз. Почему это произошло. Может быть, это из-за CORS?

ниже мои журналы из одного сообщения, напечатанные с одного и того же фильтра.

 http://localhost:8080/BlogRest/controller/endpoint/|#]
  Key=host, value=localhost:8080|#]
  Key=origin, value=http://localhost:3000|#]
  Key=access-control-request-method, value=POST|#]
  Key=content-length, value=0|#]
  Key=access-control-request-headers, value=authorization,content-type|#]
  Key=connection, value=keep-alive|#]
  Key=accept, value=*/*|#]
  Key=user-agent, value=user agent data|#]
  Key=referer, value=http://localhost:3000/|#]
  Key=accept-language, value=pl-pl|#]
  Key=accept-encoding, value=gzip, deflate|#]
  

второй звонок

  http://localhost:8080/BlogRest/controller/endpoint/|#]
  Key=host, value=localhost:8080|#]
  Key=origin, value=http://localhost:3000|#]
  Key=content-type, value=application/json|#]
  Key=accept-language, value=pl-pl|#]
  Key=accept-encoding, value=gzip, deflate|#]
  Key=connection, value=keep-alive|#]
  Key=accept, value=*/*|#]
  Key=user-agent, value=user agent data|#]
  Key=authorization, value=Bearer token|#]
  Key=referer, value=http://localhost:3000/origin|#]
  Key=content-length, value=15|#]

person Bogus    schedule 14.03.2021    source источник
comment
Из-за CORS fetch() сначала запускает HEAD /path для получения заголовков, а затем [GET/POST/PUT/DELETE] /path для фактического выполнения запроса.   -  person Logan Devine    schedule 14.03.2021
comment
есть ли способ настроить фильтр так, чтобы он не вызывался, когда выборка запрашивает заголовки? Я имею в виду этот первый звонок.   -  person Bogus    schedule 14.03.2021
comment
Требуется КОРС.   -  person Logan Devine    schedule 14.03.2021


Ответы (1)


Есть два запроса из-за CORS. Одним из методов запроса является OPTIONS, и когда он предварительно сформирован, начинается ожидаемый запрос POST. Запрос OPTIONS не вызывает конечную точку, он просто получает конфигурацию сервера. Поэтому я отфильтровал свой запрос фильтра Java по методу, используя HttpServletRequest getMethod().

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

        HttpServletRequest requ = (HttpServletRequest) request;

        if (requ.getMethod().toLowerCase().equals(HttpMethod.OPTIONS)) {
            chain.doFilter(request, response);
            return;
        }

        //do something on not options method.            

        chain.doFilter(request, response);

    }
person Bogus    schedule 14.03.2021