AngularJS Web 客户端无法从 Scala Play 服务器获取资源
AngularJS web client can't get resource from Scala Play server
当我尝试从 Scala 服务器获取一些数据时,我的浏览器出现异常。
XMLHttpRequest 无法加载 http://localhost:9000/api/v1/animals。请求的资源上不存在 'Access-Control-Allow-Origin' header。
我的 "CorsFilter.scala" 文件:
package filters
import config.{ Global, WebConfig }
import play.api.GlobalSettings
import play.api.mvc.{ Filter, RequestHeader, SimpleResult }
import scala.concurrent.Future
object CorsFilter extends Filter with GlobalSettings {
lazy val injector = Global.injector
lazy val webConfig = injector.getInstance(classOf[WebConfig])
def apply(next: (RequestHeader) => Future[SimpleResult])(request: RequestHeader): Future[SimpleResult] = {
val result = next(request)
val origin = request.headers.get("Origin")
origin.filter(originString => originString.endsWith("animal.list") || originString == webConfig.apiDomain).map { validOrigin =>
result.map(_.withHeaders(
"Access-Control-Allow-Origin" -> validOrigin,
"Access-Control-Expose-Headers" -> "Server-Authorization"))(controllers.executionContext)
}.getOrElse(result)
}
}
还有我发送请求的函数:
...
PlacesService.getAllAnimals = ->
$http.get('http://localhost:9000/api/v1/animals').then (result) ->
result.data
...
我应该如何配置服务器来解决我的问题?
我找到了解决办法!添加了这个选项:
... ||originString.startsWith("http://localhost")).map ...
当我尝试从 Scala 服务器获取一些数据时,我的浏览器出现异常。 XMLHttpRequest 无法加载 http://localhost:9000/api/v1/animals。请求的资源上不存在 'Access-Control-Allow-Origin' header。 我的 "CorsFilter.scala" 文件:
package filters
import config.{ Global, WebConfig }
import play.api.GlobalSettings
import play.api.mvc.{ Filter, RequestHeader, SimpleResult }
import scala.concurrent.Future
object CorsFilter extends Filter with GlobalSettings {
lazy val injector = Global.injector
lazy val webConfig = injector.getInstance(classOf[WebConfig])
def apply(next: (RequestHeader) => Future[SimpleResult])(request: RequestHeader): Future[SimpleResult] = {
val result = next(request)
val origin = request.headers.get("Origin")
origin.filter(originString => originString.endsWith("animal.list") || originString == webConfig.apiDomain).map { validOrigin =>
result.map(_.withHeaders(
"Access-Control-Allow-Origin" -> validOrigin,
"Access-Control-Expose-Headers" -> "Server-Authorization"))(controllers.executionContext)
}.getOrElse(result)
}
}
还有我发送请求的函数:
...
PlacesService.getAllAnimals = ->
$http.get('http://localhost:9000/api/v1/animals').then (result) ->
result.data
...
我应该如何配置服务器来解决我的问题?
我找到了解决办法!添加了这个选项:
... ||originString.startsWith("http://localhost")).map ...