Play Framework 2.6.x如果cookie不存在,如何为每个请求添加特定的cookie

时间:2017-08-02 23:01:11

标签: scala playframework playframework-2.6

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

1 个答案:

答案 0 :(得分: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

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