我正在開發一個基於Play Framework 2.5(Java)後端的Angular 2應用程序。如果我通過瀏覽器URL訪問我的端點,它們工作正常。然而,從角2應用程序中調用它顯示的錯誤:CORS Play框架
XMLHttpRequest cannot load localhost:9000/app/myendpoint. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'localhost:3000' is therefore not allowed access. The response had HTTP status code 500.
我已經tryed跟隨documentation和創建過濾器:
在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);
}
}
In 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
)
謝謝大家! :)
需要在服務器上進行配置,並且與Angular無關。如果你使用'withCredentials',必須提供確切的原點而不是'*'。 CORS只適用於HTTP請求被設置爲不同的URL,然後index.html最初被加載的地方,這就是爲什麼它在你直接在瀏覽器中輸入URL的原因。 –
我同意,這是服務器端。我不知道該怎麼做,或者找你的答案,對不起。 – Patriicya
你在使用iFrames嗎? – amitmah