在Java play app中启用CORS过滤器

时间:2016-04-25 21:07:46

标签: java angularjs cors playframework-2.4

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

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无法加载http://localhost:9000/app/search/0/10。对预检请求的响应未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头。因此,不允许原点“http://localhost”访问。响应的HTTP状态代码为403。

我该如何解决这个问题?

3 个答案:

答案 0 :(得分:2)

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

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()
    };
}

答案 1 :(得分:2)

我终于让我的CORSFilter工作了。关于这方面的文档非常少,有什么不起作用。希望这有助于某人。 (播放2.5.4)

import com.google.inject.Inject;
import play.http.HttpFilters;
import play.mvc.EssentialAction;
import play.mvc.EssentialFilter;
import play.filters.cors.CORSFilter;

public class MyFilters 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

play.filters.cors{
# allow all paths
  pathPrefixes = ["/"]
  # allow all origins
  allowedOrigins = null
  allowedHttpMethods = ["GET", "POST", "PUT", "DELETE"]
  # allow all headers
  allowedHttpHeaders = null
}

答案 2 :(得分:0)

将这些行添加到application.conf中。

play.filters.cors {
  # allow all paths
  pathPrefixes = ["/"]
  # allow all origins
  allowedOrigins = null
  allowedHttpMethods = ["GET", "POST", "PUT", "DELETE"]
  # allow all headers
  allowedHttpHeaders = null
}

您可以参考我的this回答了解更多信息。