Pat*_*cya 9 java cors playframework angular
我正在Play Framework 2.5(Java)后端开发一个Angular 2应用程序.如果我通过浏览器URL访问我的端点,它们可以正常工作.但是,从Angular 2应用程序调用它会显示错误:
XMLHttpRequest无法加载localhost:9000/app/myendpoint.请求的资源上不存在"Access-Control-Allow-Origin"标头.因此不允许原点'localhost:3000'访问.响应的HTTP状态代码为500.
我试着按照文档创建过滤器:
在application.conf中:
play.filters {
cors {
pathPrefixes = ["/app"]
allowedOrigins = null
allowedHttpMethods = null
}
Run Code Online (Sandbox Code Playgroud)
过滤:
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);
}
}
Run Code Online (Sandbox Code Playgroud)
在build.sbt中:
libraryDependencies ++= Seq(
...,
filters
)
Run Code Online (Sandbox Code Playgroud)
有谁知道真正的解决方案?谢谢 :)
工作代码:
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;
}
}
Run Code Online (Sandbox Code Playgroud)
在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
} ...
Run Code Online (Sandbox Code Playgroud)
在build.sbt中:
libraryDependencies ++= Seq(
...,
filters
)
Run Code Online (Sandbox Code Playgroud)
谢谢你们!:)
我记得有同样的导入问题,因为我认为 Play 中的过滤器有一些重新打包更改2.5.0
。并在重构期间DefaultHttpFilters
被替换。HttpFilters
检查源代码以获得正确的路径HttpFilters
。为您正在使用的 Play 版本选择正确的标签,然后向下搜索源代码树,直到找到HttpFilters
并检查该包。这是 v 2.5.0 的 Java API 的路径。
从您的帖子来看,您似乎正在使用 Java API,但正在使用 Scala 版本的导入。
Play 的导入2.5.0
是:-
斯卡拉import play.api.http.HttpFilters
-Java-import play.http.HttpFilters
我正在使用 Play 2.5.0
(虽然是 Scala - 不是 Java),这个导入对我来说工作得很好:-
import play.api.http.HttpFilters
Run Code Online (Sandbox Code Playgroud)
根据您发布的内容,我认为您应该尝试将有问题的导入更改为:-
import play.http.HttpFilters
Run Code Online (Sandbox Code Playgroud)
另外,(正如其他人所说)Filters.java
如果您尚未将文件放入根包中,我假设您已为文件配置了包。
这是我的条目application.conf
,因为我正在使用package filters
而不是默认包。:-
play.http.filters = "filters.Filters"
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2110 次 |
最近记录: |