允许来自任何地方的 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标头都没有运气

可能来自任何地方记录的消息的 NSError?

sh 添加选项允许从任何地方下载的应用程序为mac

如何允许从 ruby​​ 中的特定类初始化一个类,而其他任何地方都没有?

来自 Angular 的 405

如何使用 .NET Core 2 配置 Angular 6 以允许来自任何主机的 CORS?