java - 在 Java play 应用程序中启用 CORS 过滤器

标签 java angularjs cors playframework-2.4

我尝试在我的 java play 应用程序上启用 CORS 过滤器。我正在使用 angularjs 访问 localhost 来获取一些数据。这是我在 play 应用程序方面所做的,

application.conf

play.http.filters = "com.de.filters.Filters"
play.filters.cors {
    allowedOrigins = null
    allowedHttpMethods = ["GET", "POST"]
    allowedHttpHeaders = ["Accept"]
    preflightMaxAge = 3 days
}

Filters.java

public class Filters implements HttpFilters {
    @Inject
    CORSFilter corsFilter;

    public EssentialFilter[] filters() {
        return new EssentialFilter[]{corsFilter};
    }
}

当我试图调用我的服务时,它给我一个错误,

XMLHttpRequest cannot load http://localhost:9000/app/search/0/10. Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost' is therefore not allowed access. The response had HTTP status code 403.

我该如何解决这个问题?

最佳答案

来自Play 2.3 Documentation , 首先将过滤器添加到 build.sbtlibraryDependencies 列表中,如下所述。

libraryDependencies += filters

然后,在application.conf中,不要将play.filters.cors.allowedOrigins设置为[null],它默认到“允许所有来源”。设置有效的域列表或忽略它。不要忘记引用您的过滤器:

play.http.filters = "filters.Filters"

最后,在您的 Filters.filter() 方法中,如下所示,指定 asJava() 方法,如文档中所述。

public EssentialFilter[] filters() {
    return new EssentialFilter[] { 
        corsFilter.asJava()
    };
}

关于java - 在 Java play 应用程序中启用 CORS 过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36851103/

相关文章:

javascript - 使用 AngularJS 根据选择值显示 div

Python Flask CORS - API 始终允许任何来源

java - Spring 启动+安全: No Access-Control-Allow-Origin header when setting allowed origins

java - 无论如何,我们从 servlet 知道客户端是否仍在等待

java - JFrame GUI 上未显示任何组件

java - Java 的独立 XML-RPC/SOAP/etc 实现

angularjs - 如何创建本地主机服务器来运行 AngularJS 项目

asp.net - 包装 StaticFileMiddleware 以重定向 404 错误

java - Android DDMS 为空

ajax - 允许跨域 ajax 请求中的 header