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

scala – 我可以在Play Framework 2中返回动作之前设置cookie吗

发布时间:2020-12-16 09:54:31 所属栏目:安全 来源:网络整理
导读:我知道我可以在返回动作时在Ok(…).withCookies(…)中设置cookie.但是我想知道是否有办法通过操纵请求对象来设置一些cookie.这样我就可以在我的模型中设置一些cookie,而我的控制器只需要将它们发回去. 解决方法 我这样做只是作为练习,并且还表明Play框架非常
我知道我可以在返回动作时在Ok(…).withCookies(…)中设置cookie.但是我想知道是否有办法通过操纵请求对象来设置一些cookie.这样我就可以在我的模型中设置一些cookie,而我的控制器只需要将它们发回去.

解决方法

我这样做只是作为练习,并且还表明Play框架非常灵活,并且它在任何意义上都不会限制你.我想出了如何纯粹从Play源代码中做到这一点,它非常干净且易于阅读.这不是使用cookie或在Play中使用HttpRequest对象的首选方式.正如 Jatin建议您将cookie解码为正确的模型,将这些模型传递给您的服务,然后将服务结果转换为play.api.mvc.Result,从而保持您的http和业务逻辑层分离.

这是代码(您可以看到Headers对象不打算以这种方式使用):

import play.api.http.HeaderNames.COOKIE

val cookies = Cookies(request.headers.get(COOKIE)).cookies

val myCookies = cookies + ("cookieName" -> Cookie("cookieName","cookieValue"))

val headersMap = request.headers.toMap

val myHeaderMap = headersMap +  
      (COOKIE -> Seq(Cookies.encode(myCookies.values.toSeq)))

val myHeaders = new play.api.mvc.Headers {
  val data:Seq[(String,Seq[String])] = myHeaderMap.toSeq
}

val modifiedRequest = request.copy(headers = myHeaders)

(编辑:李大同)

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

    推荐文章
      热点阅读