CORS не работает с угловым приложением 5 tomcat 8 - PullRequest
0 голосов
/ 08 сентября 2018

Есть несколько ответов на эту проблему здесь, в SO. И все они сводились к настройке CORSFilter в web.xml (в приложении или на сервере). И я пытался и до сих пор пытаюсь сделать эту работу. Вот подробности: внешний интерфейс: приложение Angular 5, запущенное на локальном хосте: 4200 backend: приложение REST на основе cxf, работающее на Tomcat 8 со скоростью https : // localhost: 4553 Отображение фильтра CORS в web.xml:

<filter>
        <filter-name>CorsFilter</filter-name>
        <filter-class>org.apache.catalina.filters.CorsFilter</filter-class>
        <init-param>
            <param-name>cors.allowed.origins</param-name>
            <param-value>*</param-value>
        </init-param>
         <init-param>
            <param-name>cors.allowed.headers</param-name>
            <param-value>Origin, Accept, X-Requested-With, Content-Type, Access-Control-Request-Method, Access-Control-Allow-Origin, Access-Control-Request-Headers, Authorization</param-value>
        </init-param> 
        <init-param>
            <param-name>cors.exposed.headers</param-name>
            <param-value>Access-Control-Allow-Origin,Access-Control-Allow-Credentials, Content-Type, Authorization</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>CorsFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

Я использую аутентификацию на основе токенов JWT с помощью AuthInterceptor в angular, который добавляет маркер Bearer в заголовок, если он присутствует, к каждому запросу.

Остальная конечная точка для аутентификации: https://localhost:8453/onlinecounselling/service/auth

Код перехватчика:

intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {

      request = request.clone({
        setHeaders: {
          Authorization: `${this.auth.getAccessToken().flatMap(t => `Bearer ` + t)}`
        }
      });   

    return next.handle(request);
  }

Теперь, когда я отправляю этот запрос авторизации, прежде всего, запрос переходит в предполетный режим (что я не уверен, почему, я проверил MDN статью , но не сделал найти причину) и отправив запрос OPTIONS, заголовки запроса, относящиеся к этому:

Request Headers
Access-Control-Request-Headers: content-type,no-token 

Метод контроля доступа-запроса: POST Происхождение: http://localhost:4200 Пользователь-агент: Mozilla / 5.0 (X11; Linux x86_64) AppleWebKit / 537.36 (KHTML, как Gecko) Chrome / 68.0.3440.106 Safari / 537.36

И заголовок ответа как раз такой:

Cache-Control: private
Content-Length: 0
Content-Type: text/plain
Date: Sat, 08 Sep 2018 16:02:31 GMT
Expires: Thu, 01 Jan 1970 05:30:00 IST

Нет заголовков, связанных с CORS, которые я дал в CORSFilter.

Я следовал этому ответу , статье CORSFilter сайта Tomcat, и консультировался со многими другими, но пока не нашел решения.

Я проверил у Postman, который работал нормально, и понял, что Postman не работает так же, как браузер при отправке запроса.

Дайте мне знать, если понадобятся какие-либо другие детали. Я застрял здесь последние два дня.

Ответы [ 2 ]

0 голосов
/ 25 мая 2019

Мое решение состояло в том, чтобы мои запросы проходили через proxy.conf.json и устанавливали responseType: 'text' или 'text / json' или все, что вам нужно. Это позволило ответу наконец прийти к моему console.log (). источник .

0 голосов
/ 07 апреля 2019

Попробуйте добавить заголовок "no-token" в раздел "cors.allowed.headers".

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