在 Play Framework 2.4 中为 Scala 实现 CORS
Posted
技术标签:
【中文标题】在 Play Framework 2.4 中为 Scala 实现 CORS【英文标题】:Implementing CORS in Play Framework 2.4 for Scala 【发布时间】:2015-10-17 12:00:27 【问题描述】:我还没有成功地使 CORS 请求在我的项目中工作,基本上是一个 Play 服务器和一个 AngularJS Web 客户端。
由于需要考虑许多变量,我想首先确保至少在 Play 服务器端一切正常。但是,我的错,Play 2.4 documentation on CORS 不足以帮助我找出具体的用例。
两个基本问题:
-
在项目的根目录中创建一个过滤器类(请参阅docs):将提供的代码放在哪里?不确定“项目的根”是什么,我在
app/controllers/Mycontr.scala
中将类添加到了我的控制器中
文档中描述的点够了吗?或者其他部分也需要接触,例如app/conf/routes
中的路由
试图找到一个完整的教程,但没有玩 2.4 的运气
【问题讨论】:
【参考方案1】:“你的项目的根目录”是指对应于包根目录的目录。默认为app/
,使用default sbt layout时为src/main/scala/
。就是这样。
【讨论】:
好的,我将代码放在新创建的app/root.scala
中,现在它可以工作了。因此,在我的情况下,不需要触及服务器端的其他部分;也不需要更改 AngularJS 客户端。【参考方案2】:
我遇到了同样的问题,它一直在说:
XMLHttpRequest 无法加载 http://localhost:9000/fetchBetween。 对预检请求的响应未通过访问控制检查:否 请求中存在“Access-Control Allow-Origin”标头 资源。因此不允许使用原点“http://localhost:3000” 使用权。响应的 HTTP 状态代码为 404。
我将Filters.scala
添加到我的app/
文件夹,并将filters
添加到libraryDependencies
,这是我在application.conf
中的配置:
play.filters.cors
pathPrefixes = ["/fetchBetween"]
allowedOrigins = ["*"]
allowedHttpMethods = ["GET", "POST"]
allowedHttpHeaders = ["Accept"]
preflightMaxAge = 3 days
【讨论】:
这个位置是为了回答,而不是问题。以上是关于在 Play Framework 2.4 中为 Scala 实现 CORS的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Jenkins 在本地自动部署 Play Framework (2.4) 应用程序?