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

jcm*_*jcm 5 scala cors playframework-2.0

我想在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
Run Code Online (Sandbox Code Playgroud)

以及预检选项操作:

  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");
  }
Run Code Online (Sandbox Code Playgroud)

定义了一条路线:

OPTIONS        /*all                                controllers.Application.preflight(all: String)
Run Code Online (Sandbox Code Playgroud)

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

Mic*_*jac 3

GlobalSettings对象需要位于默认包中,因此package filters会导致 Play 忽略它。我建议将其移动到它自己的文件中Global.scala