为Lagom Java启用CORS过滤器

时间:2016-10-27 18:09:44

标签: angularjs playframework cors lagom

我已经按照Cross-Origin Resource Sharing的说明从localhost:3000(我的角度前端正在运行的地方)访问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能够在那里工作吗?

3 个答案:

答案 0 :(得分:1)

这是James Roper的一句话他在Lagom谷歌用户组发表了

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

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

答案 1 :(得分: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
}

答案 2 :(得分:1)

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

*我在api和impl *

中的build.sbt中添加了以下这一行

libraryDependencies + = filters

在我的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微服务,它就像一个魅力。