403 仅在我的机器上 - Angular 2 和 Tomcat 8.5

Posted

技术标签:

【中文标题】403 仅在我的机器上 - Angular 2 和 Tomcat 8.5【英文标题】:403 only on my machine - Angular 2 & Tomcat 8.5 【发布时间】:2018-05-08 18:55:32 【问题描述】:

所以我在做一个小组项目,我们所有人都把我们的 git 分支推到了 master 的头上。这意味着我们都在运行相同的代码。当我们进入我们项目的登陆页面时,我们的ngOnInit() 发送一个包含自定义标头的标头的获取请求,对吧?

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 作为响应,但我收到以下消息:

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

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

后端CORS过滤器:

    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"));

【问题讨论】:

它可以在其他开发者机器上运行吗? 是的,它可以在其他队友的浏览器和后端上运行 您有哪些 CORS 选项?您是否正在运行任何可能剥离标头的中间件? 我的意思是我们包含了请求标头中的标头。我有,在问题底部添加了后端标题。 另外,这个调用不会命中后端服务器 【参考方案1】:

所以我们想通了,把header函数改成这样:

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

它奏效了。如果有人能告诉我原因,我将不胜感激。

【讨论】:

以上是关于403 仅在我的机器上 - Angular 2 和 Tomcat 8.5的主要内容,如果未能解决你的问题,请参考以下文章

执行 POST 请求时的 Spring Boot 端点 403 OPTIONS

仅在 https 上出现禁止的 403 错误,但 url http 工作正常

AllowOverride for .htaccess 在本地机器上给出 403 Forbidden

405 方法不允许,Django + ngrok,仅在我的本地机器上

PHP7 学习笔记403 Forbidden - WAMP Server 2.5

CORS 预检请求返回“403 Forbidden”;随后的请求,然后仅在 Chrome 中发送