每次REST调用都会丢失会话

时间:2018-06-02 01:26:23

标签: java angular rest cors http-headers

我在http://localhost:4200/myfrontend上有一个Angular应用程序,它从http://localhost:8080/mybackend上的Java REST API获取数据。但是在Angular应用程序中,每次我联系REST api时都会创建一个新会话。

我创建了一个测试,我将前端和后端放在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'
  })
};

当前端和后端网址不同时,我必须做些什么来保持会话?这是缺少的CORS设置吗?

1 个答案:

答案 0 :(得分:0)

目前,这两个网址都有自己的会话。您实际需要的是“后端到后端”通信。您可以使用开发服务器代理来实现此目的。

dev-server proxy是一个软件,位于执行Ajax请求的JavaScript / Angular应用程序和后端API之间。

所以,假设没有这样做 -

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

使用

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

在角度CLI项目的根目录下创建proxy.conf.json文件。

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

我们的申请中向/ mybackend / ...发出的所有请求都将转发到http://8080:/ ....

现在还要启动服务器,你需要使用

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

注意:changeOrigin属性。当您在后端使用某些虚拟代理(例如使用Apache2配置)时,您肯定必须将其设置为true。

它的作用是简单地将浏览器请求放在您运行应用程序运行的同一域+端口,然后将该请求转发到后端API服务器。

免责声明:不建议用于制作