I have a java play framework 2.4.x web app providing a JSON/HTTP API. When I run my front-end HTML/JS file:///Users/nize/tmp/index.html
calling the API on
I think the CORS filter in Play does not work! I followed step by step as but somehow I always got HTTP-403 in the browser (Chrome and Firefox) in Ajax calls. Problem is I don't even get stacktrace on server side. I think DefaultHttpErrorHandler
in the CORS filter somehow gulp that. In the response "Access-Control-Allow-Origin" header was missing so I just manually added that.
class Filters @Inject() (corsFilter: CORSFilter, log: LoggingFilter) extends HttpFilters {
def filters = {
// CORS filter does not work
//Seq(corsFilter, log)
Seq(log)
}
}
This is the logging filter (Credit: Play! framework)
class LoggingFilter extends Filter {
def apply(nextFilter: RequestHeader => Future[Result])(requestHeader: RequestHeader): Future[Result] = {
val startTime = System.currentTimeMillis
nextFilter(requestHeader).map { result =>
val endTime = System.currentTimeMillis
val requestTime = endTime - startTime
Logger.info(s"${requestHeader.method} ${requestHeader.uri} " +
s"took ${requestTime}ms and returned ${result.header.status}")
result.withHeaders(
"Request-Time" -> requestTime.toString,
"Access-Control-Allow-Origin" -> "*" // Added this header
)
}
}
}