1

我遵循了跨域资源共享的说明,以便从 localhost:3000(我的 Angular 前端正在运行的地方)访问 localhost:9000(我的微服务正在运行的 Lagom GateWay)。但我仍然面临:

XMLHttpRequest cannot load http://localhost:9000/api/myservice. No 'Access-Control-Allow-Origin' header is present on the requested resource 

有没有人有一个启用 CORS 的示例或项目在那里工作?

4

3 回答 3

1

为了其他使用 Angular 4 前端和 lagom 后端项目的人。我已经设法解决了这个问题。

*我在 api 和 impl 的 build.sbt 中添加了下面这一行 *

libraryDependencies += 过滤器

在我的 impl 目录中,我创建了文件夹过滤器并添加了下面的代码

import play.mvc.EssentialFilter;
import play.filters.cors.CORSFilter;
import play.http.HttpFilters;

import javax.inject.Inject;

public class Filters implements HttpFilters {

    @Inject
    CORSFilter corsFilter;

    public EssentialFilter[] filters() {
        return new EssentialFilter[]{corsFilter.asJava()};
    }
}

在我的 application.conf 中,我添加了以下代码

play.filters.hosts {
  # Allow requests to example.com, its subdomains, and localhost:9000.
  allowed = ["localhost:5000", "localhost:9000"]
}

play.http.filters = "filters.Filters"

play.filters.cors {
  # Filter paths by a whitelist of path prefixes
  pathPrefixes = ["/"]

  # The allowed origins. If null, all origins are allowed.
  allowedOrigins = null
  allowedHttpMethods = ["GET", "POST"]
  allowedHttpHeaders = ["Accept"]
  preflightMaxAge = 3 days
}

在此之后,我重新启动了我的 lagom 微服务,它就像一个魅力。

于 2017-09-20T07:16:41.910 回答
1

这是 James Roper 的一句话,他发表在 Lagom google 用户组

让 CORS 在 Lagom 中工作的最简单方法是使用 Play 的 CORS 支持(Lagom 构建在 Play 之上):

https://www.playframework.com/documentation/2.5.x/CorsFilter

于 2017-01-06T21:48:05.787 回答
1

添加扩展 Play 类的 Filters 类

public class Filters extends DefaultHttpFilters {

  @Inject
  public Filters(CORSFilter corsFilter) {
    super(corsFilter);
  }
}

并添加 conf 以包含该过滤器

play.http.filters = "io.my.http.Filters"

您可能还需要配置过滤器

play.filters.cors {
  allowedOrigins = null
}
于 2017-02-24T16:42:50.573 回答