【问题标题】:Enabling CORS filter in Java play app在 Java Play 应用中启用 CORS 过滤器
【发布时间】:2016-08-19 11:10:33
【问题描述】:

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

我该如何解决这个问题?

【问题讨论】:

  • 也许尝试将 allowedOrigins 设为空字符串而不是 null ? allowedOrigins = 。或者甚至只是省略该参数。看看它是否允许。或者添加 localhost 或 127.0.0.1 到它。
  • 我做了allowedOrigins = ["127.0.0.1"]。但我仍然无法访问。

标签: java angularjs cors playframework-2.4


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    将这些行添加到 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回答以获取更多信息。

    【讨论】:

      【解决方案3】:

      我终于让我的 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
      }
      

      【讨论】:

      猜你喜欢
      • 2017-03-10
      • 2014-10-16
      • 1970-01-01
      • 2014-03-14
      • 2014-04-04
      • 2023-04-04
      • 1970-01-01
      • 2021-10-18
      • 2018-03-22
      相关资源
      最近更新 更多