Play Framework 2.6.x 如果 cookie 不存在,如何向每个请求添加特定的 cookie
Play Framework 2.6.x how to add a specific cookie to every request if the cookie does not exists
如果 cookie 不存在,我想将特定 cookie 添加到所有请求和结果中。我知道我可以在结果上使用 withCookies
,但我不想检查控制器方法中的每个请求并将其添加到每个结果中。有办法吗?
万一其他人在尝试使用动作组合时偶然发现,使用过滤器很容易实现。
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)))
}
}
}
}
在此示例中,过滤器位于控制器包中。
在您的 application.conf 文件的 play.filters 部分添加这一行
enabled += controllers.MyCookieFilter
您可能希望将控制器更改为您在其中声明过滤器的任何包。
如果 cookie 不存在,我想将特定 cookie 添加到所有请求和结果中。我知道我可以在结果上使用 withCookies
,但我不想检查控制器方法中的每个请求并将其添加到每个结果中。有办法吗?
万一其他人在尝试使用动作组合时偶然发现,使用过滤器很容易实现。
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)))
}
}
}
}
在此示例中,过滤器位于控制器包中。
在您的 application.conf 文件的 play.filters 部分添加这一行
enabled += controllers.MyCookieFilter
您可能希望将控制器更改为您在其中声明过滤器的任何包。