代码之家  ›  专栏  ›  技术社区  ›  decapo

Play Framework 2.6.x如何在cookie不存在的情况下向每个请求添加特定的cookie

  •  1
  • decapo  · 技术社区  · 9 年前

    withCookies 但是我不想检查我的控制器方法中的每个请求,并将其添加到每个结果中。有办法做到这一点吗?

    1 回复  |  直到 9 年前
        1
  •  1
  •   decapo    9 年前

    如果其他人在尝试使用动作合成时偶然发现这一点,那么很容易通过过滤器实现。

    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)))
          }
        }
      }
    }
    

    在本例中,过滤器位于控制器包中。

    enabled += controllers.MyCookieFilter

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