Проигрышная сессия при каждом вызове REST - PullRequest
0 голосов
/ 02 июня 2018

У меня есть приложение Angular на http://localhost:4200/myfrontend, которое получает данные из API Java REST на http://localhost:8080/mybackend.Однако в приложении Angular каждый раз, когда я обращаюсь к API REST, создается новый сеанс.

Я создал тест, в котором я поместил и внешний интерфейс, и внутренний интерфейс на http://localhost:8080, и сеанс не был потерян.

Настройки, которые я установил для бэкэнда Java REST:

response.getHeaders().add("Access-Control-Allow-Origin", "*");
response.getHeaders().add("Access-Control-Allow-Headers", "origin, content-type, accept, authorization");
response.getHeaders().add("Access-Control-Allow-Credentials", "true");
response.getHeaders().add("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS, HEAD");

Настройки, которые я установил для фронтэнда Angular 6.0.5:

const httpOptions = {
  headers: new HttpHeaders({
    'Content-Type': 'application/json'
  })
};

Что я должен сделатьсделать так, чтобы сеанс оставался живым, когда внешний и внутренний URL-адреса различны?Это недостающий параметр CORS?

1 Ответ

0 голосов
/ 13 июня 2018

В настоящее время оба URL имеют свои отдельные сессии.То, что вам по сути нужно - это взаимодействие «бэкэнд-бэкэнд». Этого можно добиться с помощью прокси-сервера dev-server .

Прокси-сервер dev-server - это часть программного обеспечения, которая находится вмежду приложением JavaScript / Angular, выполняющим запрос Ajax, и вашим внутренним API.

Итак, если вместо этого -

this.http.get('http://you-server-hostame:8080/mybackend/...')
.map(res => res.json());

Использовать

this.http.get('/mybackend/')
.map(res => res.json());

СоздатьФайл proxy.conf.json в корне вашего углового проекта CLI.

{
 "/mybackend/*": {
"target": "http://8080:<your service port>",
"secure": false,
"logLevel": "debug",
"changeOrigin": true
 }
}

Все запросы, сделанные в / mybackend / ... из нашего приложения, будут перенаправляться на http://8080:/....

Также теперь для запуска сервера вам нужно использовать

ng serve --proxy-config proxy.config.json

Примечание: свойство changeOrigin. Вам определенно нужно будет установить значение true, если вы используете некоторые виртуальные прокси (например, настроенные с помощью Apache2)на вашем бэкэнде.

Он просто берет запрос браузера на тот же домен + порт, на котором запускается ваше веб-приложение, а затем перенаправляет этот запрос на ваш бэкэнд-сервер API.

Disclaimer: не рекомендуется для производства

...