Scala Play 2.2应用程序中的CORS过滤器

Scala Play 2.2应用程序中的CORS过滤器,scala,playframework-2.0,cors,Scala,Playframework 2.0,Cors,我想在Play 2.2.x应用程序中实现CORS过滤器。到目前为止,我有以下几点: package filters import play.api.mvc._ import play.api.libs.concurrent.Execution.Implicits.defaultContext import play.api.GlobalSettings class CorsFilter extends EssentialFilter { def apply(next: Essential

我想在Play 2.2.x应用程序中实现CORS过滤器。到目前为止,我有以下几点:

package filters

import play.api.mvc._
import play.api.libs.concurrent.Execution.Implicits.defaultContext
import play.api.GlobalSettings

class CorsFilter extends EssentialFilter {
  def apply(next: EssentialAction) = new EssentialAction {
    def apply(requestHeader: RequestHeader) = {
      next(requestHeader).map { result =>
        result.withHeaders("Access-Control-Allow-Origin" -> "*",
          "Access-Control-Expose-Headers" -> "WWW-Authenticate, Server-Authorization",
          "Access-Control-Allow-Methods" -> "POST, GET, OPTIONS, PUT, DELETE",
          "Access-Control-Allow-Headers" -> "x-requested-with,content-type,Cache-Control,Pragma,Date")
      }
    }
  }
}

object Global extends WithFilters(new CorsFilter) with GlobalSettings
以及飞行前选项操作:

  def preflight(all: String) = Action {
    Ok("").withHeaders("Access-Control-Allow-Origin" -> "*",
      "Allow" -> "*",
      "Access-Control-Allow-Methods" -> "POST, GET, PUT, DELETE, OPTIONS",
      "Access-Control-Allow-Headers" -> "Origin, X-Requested-With, Content-Type, Accept, Referrer, User-Agent");
  }
定义了路线后:

OPTIONS        /*all                                controllers.Application.preflight(all: String)

似乎正在发生的是没有执行CorsFilter代码。我打开了调试器,没有看到任何请求命中此筛选器。为什么会这样?是否有其他地方我需要定义过滤器,以便Play可以看到它

GlobalSettings对象需要在默认包中,因此
包过滤器
会导致播放忽略它。我建议将其移动到自己的文件
Global.scala

中,对于类似的项目,尝试让AngularJS web客户端与scala服务器通信,但使用的头不起作用。我们使用:

    ACCESS_CONTROL_ALLOW_ORIGIN -> "*",
    ACCESS_CONTROL_ALLOW_METHODS -> "GET, POST, OPTIONS",
    ACCESS_CONTROL_ALLOW_HEADERS ->  "Origin, Accept, Authorization, X-Auth-Token",
    ACCESS_CONTROL_ALLOW_CREDENTIALS -> "true"

正如LimbSoup所建议的,我们在自己的文件中有全局对象。我们借用了代码的主体,但硬编码了头,而不是通过编程实现它们

哇,真管用。我花了这么多时间试图弄清楚问题是什么,这是我最不可能想到的地方。是否在任何地方记录了这一点?另请参见注释