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

Scala Play 2.2应用程序中的CORS过滤器

发布时间:2020-12-16 09:54:50 所属栏目:安全 来源:网络整理
导读:我想在Play 2.2.x应用程序中实现一个CORS过滤器.到目前为止,我有以下内容: package filtersimport play.api.mvc._import play.api.libs.concurrent.Execution.Implicits.defaultContextimport play.api.GlobalSettingsclass CorsFilter extends EssentialFi
我想在Play 2.2.x应用程序中实现一个CORS过滤器.到目前为止,我有以下内容:

package filters

import play.api.mvc._
import play.api.libs.concurrent.Execution.Implicits.defaultContext
import play.api.GlobalSettings

class CorsFilter extends EssentialFilter {
  def apply(next: EssentialAction) = new EssentialAction {
    def apply(requestHeader: RequestHeader) = {
      next(requestHeader).map { result =>
        result.withHeaders("Access-Control-Allow-Origin" -> "*","Access-Control-Expose-Headers" -> "WWW-Authenticate,Server-Authorization","Access-Control-Allow-Methods" -> "POST,GET,OPTIONS,PUT,DELETE","Access-Control-Allow-Headers" -> "x-requested-with,content-type,Cache-Control,Pragma,Date")
      }
    }
  }
}

object Global extends WithFilters(new CorsFilter) with GlobalSettings

以及预检选项操作:

def preflight(all: String) = Action {
    Ok("").withHeaders("Access-Control-Allow-Origin" -> "*","Allow" -> "*",DELETE,OPTIONS","Access-Control-Allow-Headers" -> "Origin,X-Requested-With,Content-Type,Accept,Referrer,User-Agent");
  }

定义了一条路线:

OPTIONS        /*all                                controllers.Application.preflight(all: String)

似乎正在发生的是CorsFilter代码没有被执行.我打开了调试器,但没有看到我的任何请求到达此过滤器.为什么会这样?是否有其他地方我需要定义过滤器的东西,以便Play可以看到它?

解决方法

GlobalSettings对象需要位于默认包中,因此包过滤器会导致Play忽略它.我建议将它移动到它自己的文件Global.scala.

(编辑:李大同)

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

    推荐文章
      热点阅读