允许来自任何地方的Access-Control-Allow-Origin(Java和ember.js)

时间:2017-01-28 15:01:23

标签: java ember.js jersey cors jetty

我在服务器端使用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的流量?它是一个Web应用程序,显然我需要允许来自任何地方的任何客户端访问。我需要对代码进行哪些更改?

1 个答案:

答案 0 :(得分:1)

  

显然我需要允许来自任何地方的任何客户端进行访问

我认为这里存在误解。 Access-Control-Allow-Origin指定客户端应用程序的服务器

您的客户端应用程序是否在特定来源上运行?

  • 如果是:没有问题。为您的应用程序定义一些profiles。通过这样做,您可以在生产配置文件中定义客户端应用程序服务器的来源
  • 如果否:您可以使用"*"接受 cors过滤器中的所有来源。如果这段代码是由您编写的,则只需参数化第二个参数以提供客户端的主机名。它应该是:request.getRemoteHost();