Tomcat Jersey блокирует сервер по предварительному запросу «OPTIONS» - PullRequest
0 голосов
/ 15 мая 2018

Я работаю на сервере Tomcat 7 в течение прошлого года или около того, с несколькими проектами на джерси.

Один из проектов API, который раньше работал нормально, обычно занимает много времени для обработки запроса «OPTIONS» перед полетом.Он реагирует, но имеет очень случайное поведение, иногда это занимает 5 - 10 секунд, другие - в миллисекундах.

Проблема, отображаемая в инструментах Chrome Dev - 1

Проблема, показанная в инструментах Chrome Dev - 2

Сервер получает запрос через очень долгое время (5 - 10 секунд) для обслуживания запроса OPTIONS (проверяется путем добавления указателя отладки).на первый кусок кода, который получен сервером.).Проблема заключается в том, что он блокирует весь сервер, и сервер не может обработать какой-либо дополнительный запрос, пока предварительная проверка не будет очищена.

Примечание: эта проблема не возникает, если запрос сделан из POSTMAN, только внешний иЭта проблема возникает из-за инструментов перекрестного происхождения.

То, что я пробовал:

  1. Удаление всех зависимостей maven.
  2. Очистка проектов, их повторный импорт в IDE, повторное использование репозитория.
  3. Обеспечение отсутствия тупика или бесконечного цикла.

Код фильтра:

@PreMatching
@Priority(value = 1)
@Provider
public class EnterpriseAPIRequestFilter implements ContainerRequestFilter {
    @Context
    private HttpServletRequest sr;
    private Logger logger = Logger.getLogger(EnterpriseAPIRequestFilter.class);

    public void filter(ContainerRequestContext ctx) throws IOException {

        logger.info("Request Received for :" + sr.getPathInfo());
        logger.info("Remote IP :" + sr.getRemoteAddr());
        logger.info("Remote Host :" + sr.getLocalAddr());
        Authenticator authenticator = new Authenticator();
        MultivaluedMap<String, String> headers = ctx.getHeaders();
        String role = headers.getFirst("channelRole");
        String locale = headers.getFirst("locale");

        if (sr.getMethod().equalsIgnoreCase("OPTIONS"))
            return;

       //MORE CODE EXISTS HERE.


    }



@Provider
public class CORSResponseFilter
implements ContainerResponseFilter {

    public void filter(ContainerRequestContext requestContext, ContainerResponseContext responseContext)throws IOException {
        MultivaluedMap<String, Object> headers = responseContext.getHeaders();
        headers.add("Access-Control-Allow-Origin", "*");
        headers.add("Access-Control-Allow-Methods", "OPTIONS, GET, POST, DELETE, PUT");         
        headers.add("Access-Control-Allow-Headers", "X-Requested-With, Content-Type, X-Codingpedia, channelRole, channelauthkey,channeltype,channelname,channelidentifier,orgid,id,channelOrgId,key,employeeId,subRole");
    }


}

1 Ответ

0 голосов
/ 17 мая 2018

Странно, удаление текущего кота и размещение его новой копии устранило проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...