Ich möchte einen CORS-Filter in meiner Play 2.2.x-Anwendung implementieren. Bisher habe ich folgende:CORS Filter in Scala Play 2.2 Anwendung
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
sowie eine Preflight-Optionen Aktion:
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");
}
mit einer Route definiert:
OPTIONS /*all controllers.Application.preflight(all: String)
Was passiert zu sein scheint, ist, dass CorsFilter Code wird nicht ausgeführt. Ich habe meinen Debugger geöffnet und ich sehe keine meiner Anfragen, die diesen Filter schlagen. Warum sollte das sein? Gibt es irgendwo anders, wo ich das Filtermaterial definieren muss, damit Play es sehen kann?
Wow, das funktioniert. Ich verbrachte so viel Zeit damit, herauszufinden, was das Problem war, das wäre der letzte Ort gewesen, an den ich gedacht hätte. Ist das irgendwo dokumentiert? – jcm
Ja: http://www.playframework.com/documentation/2.3.x/ScalaGlobal –
Siehe auch http://www.playframework.com/documentation/2.3.x/SecurityHeaders obwohl Hinweis https://github.com/ playframework/playframework/Probleme/2967 # issementcomment-45949778 –