Trouble-shooting CORS in Play Framework 2.4.x

前端 未结 7 690
没有蜡笔的小新
没有蜡笔的小新 2020-12-10 14:55

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

7条回答
  •  感情败类
    2020-12-10 15:41

    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
          )
        }
      }
    }
    

提交回复
热议问题