我已经按照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能够在那里工作吗?
答案 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微服务,它就像一个魅力。