加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

scala – Play Framework CORS Headers

发布时间:2020-12-16 18:25:12 所属栏目:安全 来源:网络整理
导读:我正在尝试为我的play框架应用程序设置CORS Headers.具体来说,我收到了这个错误 cannot load http://127.0.0.1:9000/. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:9000' is therefore not al
我正在尝试为我的play框架应用程序设置CORS Headers.具体来说,我收到了这个错误

cannot load http://127.0.0.1:9000/. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:9000' is therefore not allowed access.

我想我可以按照以下说明轻松处理:
https://www.playframework.com/documentation/2.5.x/CorsFilter

但是,这样做之后.什么也没有变.

curl -I localhost:9000/
HTTP/1.1 200 OK
Content-Length: 4540
Content-Type: text/html; charset=utf-8
Date: Mon,11 Jul 2016 20:03:33 GMT

我的担心是:

play.http.filters = "global.Filters"

play.filters.cors {
  allowedOrigins = ["http://www.example.com","*"]
  allowedHttpMethods = ["GET","POST"]
  allowedHttpHeaders = ["Accept"]
}

和我的Filters.scala文件是:

package global

import javax.inject.Inject
import play.api.http.DefaultHttpFilters
import play.filters.cors.CORSFilter

class Filters @Inject() (corsFilter: CORSFilter)
  extends DefaultHttpFilters(corsFilter)

如果有人能告诉我为什么过滤器似乎没有应用于响应,那就太好了.

解决方法

播放过滤器很诱人,但是当它们没有按预期工作时,正如您所注意到的那样,魔术并不容易追踪.

我更喜欢使用这样的东西:

implicit class RichResult (result: Result) {
  def enableCors =  result.withHeaders(
    "Access-Control-Allow-Origin" -> "*","Access-Control-Allow-Methods" -> "OPTIONS,GET,POST,PUT,DELETE,HEAD"   // OPTIONS for pre-flight,"Access-Control-Allow-Headers" -> "Accept,Content-Type,Origin,X-Json,X-Prototype-Version,X-Requested-With" //,"X-My-NonStd-Option","Access-Control-Allow-Credentials" -> "true"
  )
}

然后您可以在响应中轻松调用它,如下所示:

Ok(Json.obj("ok" -> "1")).enableCors

它很容易理解,只能放在你想要启用CORS的地方,并且非常容易调试!

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读