В последнее время у меня возникают проблемы с CORS только в Google Chrome - PullRequest
2 голосов
/ 21 января 2020

В последнее время возникли серьезные проблемы с CORS с Google Chrome:

Доступ к XMLHttpRequest в '...' from origin '...' был заблокирован политикой CORS: Ответ на предварительный запрос не проходит проверку контроля доступа: у него нет статуса HTTP ok.

Странно то, что запрос отлично работает на Mozilla Firefox.
Я пытался добавить различные заголовки на сервер, включая:

Access-Control-Allow-Headers : Тип содержимого, Авторизация, X-Requested-With, Accept, Access- Control-Request-Method, Origin, Access-Control-Request-Headers
Access-Control-Allow-Methods : GET, POST, DELETE, PUT, OPTIONS, HEAD
Доступ -Control-Allow-Origin : *

Также перед в "блоке CORS" есть метод запроса OPTIONS, Google Chrome отправляет мой сервер, но здесь я получаю ошибку 500 серверов :

javax.servlet.ServletException: MultiException имеет 4 исключения. Это:

  1. javax.ws.rs.ProcessingException: Ошибка при создании JAXBContext для обработки wadl.

  2. java .lang.IllegalStateException : Невозможно выполнить операцию: создать на org.glassfi sh .jersey.server.wadl.internal.WadlApplicationContextImpl

  3. java .lang.IllegalArgumentException: при попытке разрешить зависимости org. glassfi sh .jersey.server.wadl.processor.WadlModelProcessor $ OptionsHandler Обнаружены ошибки
  4. java .lang.IllegalStateException: Невозможно выполнить операцию: разрешить для org.glassfi sh. jersey.server.wadl.processor.WadlModelProcessor $ OptionsHandler

    org.glassfi sh .jersey.servlet.WebComponent.serviceImpl (WebComponent. java: 432) org.glassfi sh .jsey. .WebComponent.service (WebComponent. java: 370) org.glassfi sh .jersey.servlet.ServletContainer.service (ServletContainer. java: 389) org.glassfi sh .jersey.servlet.ServletContainer.service (ServletContaine r. java: 342) org.glassfi sh .jersey.servlet.ServletContainer.service (ServletContainer. java: 229) org. apache .tomcat.websocket.server.WsFilter.doFilter (WsFilter. java: 53) com.isyndix.rest.CORSFilter.doFilter (CORSFilter. java: 40)


Имеет ли это какое-либо отношение к этому?

Заранее спасибо за помощь и время.
Ура!

1 Ответ

0 голосов
/ 21 января 2020

Так что, очевидно, это было связано с тем, что предварительный просмотр OPTIONS не обрабатывался прямо в серверной части.
Я реализовал метод OPTIONS в конечной точке REST:

@OPTIONS
public Response options() {
    return Response.ok().build();
}

Имейте в виду, что это не очень хороший способ решения проблемы, поскольку вам необходимо реализовать это для каждой конечной точки в вашем API.
Но я не нашел лучшего решения, и это работает для меня.

Ура!

...