在 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的主要内容,如果未能解决你的问题,请参考以下文章

Play Framework 2.4 发送邮件

Play Framework 2.4 全局对象迁移

如何使用 Jenkins 在本地自动部署 Play Framework (2.4) 应用程序?

由于构建或路由导致 Play Framework 2.4 编译错误

Play Framework 2.4 授权

如何在 play framework(scala) 2.4 中获取当前会话或请求对象?