403只在我的机器上 - Angular 2& Tomcat 8.5

时间:2017-11-24 18:51:11

标签: angular http tomcat cors preflight

所以我正在开展一个小组项目,我们所有人都把我们的git分支推到了主人的头上。意思是我们都运行相同的代码。当我们转到项目的目标网页时,我们的ngOnInit()会发送一个包含自定义标题的标头的get请求,对吧?

createAuthorizationHeader(headers: Headers) {
    let sessionID = JSON.parse(localStorage.getItem('user-data')).JSESSIONID;
    headers.append('JSESSIONID', sessionID);
    headers.append('Access-Control-Allow-Headers', 'JSESSIONID');
    headers.append('Access-Control-Allow-Origin', 'http://localhost:4200/webplayer');
  }

ngOnInit() {
    let header = new Headers();
    this.createAuthorizationHeader(header);
    let params = new URLSearchParams();
    let options = new RequestOptions({ headers: header, params: params             });

    this.http.get('http://localhost:8080/sample-webapp/rest/music/landingPage', options)
    .subscribe(data => this.popularArtists = JSON.parse(data["_body"]).popularArtists);

似乎无害,我的队友得到了200作为回应,但我得到了这样的信息:

403 Preflight Error Message

顺便说一句,这个请求适用于我的机器上的邮递员,因此它让我认为必须与浏览器有关(Safari,Chrome和Firefox的相同问题)。

因此,我们已经完成了从添加其他字段到服务器的web.xml,添加选项注释以及删除cookie等所有工作。我真的想知道它不能仅仅在我的机器上工作。我可能在之前的步骤中遗漏了一些内容,所以请让我知道什么可行。我也可以根据要求添加我的web.xml和其他内容。

BACKEND CORS FILTER:

    response.getHeaders().add("Access-Control-Allow-Origin", request.getHeaderString("origin"));
    response.getHeaders().add("Access-Control-Allow-Headers", request.getHeaderString("access-control-request-headers"));
    response.getHeaders().add("Access-Control-Allow-Credentials", "true");
    response.getHeaders().add("Access-Control-Expose-Headers", "JSESSIONID");
    response.getHeaders().add("Access-Control-Allow-Methods", request.getHeaderString("access-control-request-method"));

1 个答案:

答案 0 :(得分:0)

所以我们想出来并将标题函数更改为:

createAuthorizationHeader(headers: Headers) {
    let sessionID = JSON.parse(localStorage.getItem('user-data')).JSESSIONID;
    headers.append('JSESSIONID', sessionID);
}

它有效。如果有人能告诉我原因,我会很感激。