XMLHttpRequest无法加载localhost:9000/app/myendpoint。所请求的资源上没有“Access-Control-Allow-Origin”标头。因此,不允许来自localhost:3000的访问。响应具有HTTP状态代码500。
我已经尝试遵循文档并创建过滤器:
在application.conf中:
play.filters {
cors {
pathPrefixes = ["/app"]
allowedOrigins = null
allowedHttpMethods = null
}
筛选器:
import play.mvc.*;
import play.api.http.DefaultHttpFilters; <- error with this import
import play.filters.cors.CORSFilter;
public class Filters extends DefaultHttpFilters {
@Inject public Filters(CORSFilter corsFilter) {
super(corsFilter);
}
}
在 build.sbt 文件中:
libraryDependencies ++= Seq(
...,
filters
)
有人知道真正的解决方案吗?谢谢 :)
工作代码:
Filters.java(位于项目根目录)
import com.google.inject.Inject;
import com.google.inject.Singleton;
import play.http.HttpFilters;
import play.mvc.EssentialAction;
import play.mvc.EssentialFilter;
import play.filters.cors.CORSFilter;
@Singleton
public class Filters extends EssentialFilter implements HttpFilters {
@Inject
private CORSFilter corsFilter;
@Override
public EssentialAction apply(EssentialAction next) {
return corsFilter.asJava().apply(next);
}
@Override
public EssentialFilter[] filters() {
EssentialFilter[] result = new EssentialFilter[1];
result[0] = this;
return result;
}
}
在 application.conf 文件中:
#filters += Filters <- yes, it is commented since my Filters is in project's root
libraryDependencies += filters
play.filters {
cors{
# allow all paths
pathPrefixes = ["/"]
# allow all origins
allowedOrigins = null
allowedHttpMethods = ["GET", "POST", "PUT", "DELETE"]
# allow all headers
allowedHttpHeaders = null
} ...
在build.sbt文件中:
libraryDependencies ++= Seq(
...,
filters
)
谢谢大家!:)
withCredentials
,必须提供确切的来源,而不仅仅是*
。CORS仅适用于HTTP请求发送到与最初加载index.html
的URL不同的URL,这就是为什么如果您直接在浏览器中输入URL,则可以正常工作的原因。 - Günter Zöchbauercors
配置和浏览器中的请求头/信息吗?我猜这只是一个配置问题。例如,如果你遵循文档,你可能会设置allowedHttpHeaders = ["Accept"]
,但是Angular可能会发送其他头部。检查是否配置错误的简单方法是将你的cors
配置更改为只包含anyOriginAllowed = true
而没有其他内容。 - handler