Desidero implementare un filtro CORS nell'applicazione Play 2.2.x. Finora ho il seguente:Filtro CORS nell'applicazione Scala Play 2.2
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
così come una verifica preliminare azione di opzioni:
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");
}
con un percorso definito:
OPTIONS /*all controllers.Application.preflight(all: String)
cosa sembra accadere è che il codice CorsFilter non viene eseguito Ho il mio debugger aperto e non vedo nessuna delle mie richieste che colpisce questo filtro. Perché dovrebbe essere? C'è qualche altra cosa che devo definire il filtro in modo che Play possa vederlo?
Wow, funziona. Ho passato così tanto tempo a cercare di capire quale fosse il problema, questo sarebbe stato l'ultimo posto in cui avrei pensato. È documentato da qualche parte? – jcm
Sì: http://www.playframework.com/documentation/2.3.x/ScalaGlobal –
Vedere anche http://www.playframework.com/documentation/2.3.x/SecurityHeaders anche se nota https://github.com/ play framework/play framework/temi/2967 # issuecomment-45.949.778 –