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

scala – Play 2 – 在所有回复中设置标题?

发布时间:2020-12-16 09:33:08 所属栏目:安全 来源:网络整理
导读:我从 Setting HTTP headers in Play 2.0 (scala)?知道可以通过执行例如Ok(“hello”).Header(PRAGMA – “no-cache”)来逐个设置响应头。 如果您想在所有操作的响应中设置该标题或几个不同的标题,该怎么办?你不会想在任何地方重复使用。而且由于这更像一个
我从 Setting HTTP headers in Play 2.0 (scala)?知道可以通过执行例如Ok(“hello”).Header(PRAGMA – >“no-cache”)来逐个设置响应头。

如果您想在所有操作的响应中设置该标题或几个不同的标题,该怎么办?你不会想在任何地方重复使用。而且由于这更像一个应用程序范围的配置,您可能不希望Action作者必须使用其他语法来获取标题(例如OkWithHeaders(…))

我现在是一个基本的Controller类,看起来像

class ContextController extends Controller {
 ...
 def Ok(h: Html) = Results.Ok(h).withHeaders(PRAGMA -> "no-cache")
}

但这不是很正确。觉得应该有更多的AOP样式的方式定义默认标题并将它们添加到每个响应中。

解决方法

在您的Global.scala中,将每个呼叫都包含在一个动作中:

import play.api._
import play.api.mvc._
import play.api.Play.current
import play.api.http.HeaderNames._

object Global extends GlobalSettings {

  def NoCache[A](action: Action[A]): Action[A] = Action(action.parser) { request =>
    action(request) match {
      case s: SimpleResult[_] => s.withHeaders(PRAGMA -> "no-cache")
      case result => result
    }
  }

  override def onRouteRequest(request: RequestHeader): Option[Handler] = {
    if (Play.isDev) {
      super.onRouteRequest(request).map {
        case action: Action[_] => NoCache(action)
        case other => other
      }
    } else {
      super.onRouteRequest(request)
    }
  }

}

在这种情况下,我只在dev模式下调用动作,这对非缓存指令是最有意义的。

(编辑:李大同)

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

    推荐文章
      热点阅读