【问题标题】:Play Framework 2.6.x how to add a specific cookie to every request if the cookie does not exists如果 cookie 不存在,Play Framework 2.6.x 如何为每个请求添加特定的 cookie
【发布时间】:2017-08-02 23:01:10
【问题描述】:

如果 cookie 不存在,我想为所有请求和结果添加一个特定的 cookie。我知道我可以在结果上使用withCookies,但我不想检查控制器方法中的每个请求并将其添加到每个结果中。有没有办法做到这一点?

【问题讨论】:

  • @danielnixon 我正在使用动作合成,但我无法让它工作。你能举个例子吗?
  • 好的,我看到过滤器与动作组合不同。我试试看。
  • @danielnixon 就是这样......谢谢十亿!!!

标签: scala playframework playframework-2.6


【解决方案1】:

如果其他人在尝试使用动作组合时偶然发现它,可以使用过滤器轻松实现。

class MyCookieFilter @Inject() (implicit val mat: Materializer, ec: ExecutionContext) extends Filter {
  def apply(nextFilter: RequestHeader => Future[Result])(requestHeader: RequestHeader): Future[Result] = {
    nextFilter(requestHeader).map { result =>
      requestHeader.cookies.get("myAwesomeCookie") match {
        case Some(cookie) => result.withCookies(cookie)
        case None => result.withCookies(Cookie("myAwesomeCookie",SecureRandomUtil.generateSecureRandom(255),Some(60*60*24*365)))
      }
    }
  }
}

在此示例中,过滤器位于 Controllers 包中。

在你的 application.conf 文件中添加这一行到 play.filters 部分

enabled += controllers.MyCookieFilter

您可能希望将控制器更改为您在其中声明过滤器的任何包。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-11-02
    • 2011-08-16
    • 2022-01-07
    • 2021-02-01
    • 1970-01-01
    • 2021-02-09
    • 1970-01-01
    相关资源
    最近更新 更多