允许来自任何地方的 Access-Control-Allow-Origin(Java 和 ember.js)
Posted
技术标签:
【中文标题】允许来自任何地方的 Access-Control-Allow-Origin(Java 和 ember.js)【英文标题】:Allowing Access-Control-Allow-Origin from anywhere (Java and ember.js) 【发布时间】:2017-06-14 03:40:15 【问题描述】:我在服务器端使用 Java Jersey 和 Jetty,并且有以下代码:
responseBuilder.header("Access-Control-Allow-Origin", "http://localhost:4200");
responseBuilder.header("Access-Control-Allow-Headers", "origin, content-type, accept, authorization, auth-token");
responseBuilder.header("Access-Control-Allow-Credentials", "true");
responseBuilder.header("Access-Control-Allow-Methods", "GET, POST, DELETE, PUT");
responseBuilder.allow("OPTIONS");
我在客户端使用 ember.js 并具有以下代码:
/app/adapters/application.js:
import DS from 'ember-data';
export default DS.RESTAdapter.extend(
host: 'http://127.0.0.1:20000',
ajax(url, method, hash)
hash = hash || ;
hash.crossDomain = true;
hash.xhrFields =
withCredentials: true
;
return this._super(url, method, hash);
);
代码组合可以将 COOKIE 作为请求的一部分发送并解决 Access-Control-Allow-Origin 问题。
但是,我担心“http://localhost:4200”是硬编码的。虽然在部署之前这不是问题,但我想这只会限制来自http://localhost:4200 的流量?它是一个网络应用程序,显然我需要允许来自任何地方的任何客户端访问。我需要对我的代码进行哪些更改?
【问题讨论】:
【参考方案1】:显然我需要允许来自任何地方的任何客户端访问
我认为这里有一个误解。 Access-Control-Allow-Origin
指定您的客户端应用程序的服务器。
您的客户端应用程序是否在特定来源上运行?
如果是:没有问题。为您的应用程序定义一些profiles
。通过这样做,您可以在生产配置文件中定义客户端应用服务器的来源。
如果不是:您可以使用 "*"
接受 cors 过滤器中的所有来源。如果这段代码是你写的,只需将第二个参数参数化为给出客户端的主机名。它应该类似于:request.getRemoteHost();
。
【讨论】:
使用通配符时,您不能使用凭据。 我放了“*”,确实抛出了一个错误。我必须将 JWT 作为 cookie 发送到服务器,所以我不能使用通配符。 @ykaragol 正如您所说的“Access-Control-Allow-Origin 指定了您的客户端应用程序的服务器”......听到这个我松了一口气。是的,我的服务器应用程序将在特定来源上运行。所以按照你说的,我一点问题都没有吧? 是的,只需编写客户端应用程序的源/服务器的 url。 (如果您的 ember 应用程序的服务器与您的 java 应用程序位于同一来源,您将不会遇到任何 cors 问题。 "*
"一般用在cors过滤器的配置文件中。你可能不需要写那段代码,你可以配置为这个问题写的cors过滤器。以上是关于允许来自任何地方的 Access-Control-Allow-Origin(Java 和 ember.js)的主要内容,如果未能解决你的问题,请参考以下文章
使用cors包和设置Access-Control标头都没有运气