【发布时间】:2018-09-03 17:23:13
【问题描述】:
我似乎在访问 Play 中的请求属性映射的属性时遇到问题。按照 Play (Link) 提供的解释,我应该从属性中获取正确的数据,但 Option 会返回为 None。
我的结构如下。一个控制器(后来注入命名为“sec”)具有共享访问的 typed 属性:
val AuthenticatedAsAttr: TypedKey[AuthenticatedEmail] = TypedKey("AuthenticatedAs")
AuthenticatedEmail 类型在此控制器的伴随对象中定义为案例类:
case class AuthenticatedEmail(email: String)
过滤器将属性传递给下一个请求:
val attrs = requestHeader.attrs + TypedEntry[AuthenticatedEmail](sec.AuthenticatedAsAttr, AuthenticatedEmail(email))
nextFilter(requestHeader.withAttrs(attrs))
当试图在另一个控制器中访问该属性时,返回的选项是无:
val auth = request.attrs.get(sec.AuthenticatedAsAttr)
我通过 println 确认该值肯定在 request.attrs 中,但没有成功调试问题的选项。下面是 println 输出的一小部分。
(Request attrs,{HandlerDef -> HandlerDef(sun.misc .... ,POST, ... Cookies -> Container<Cookies(Cookie ... , AuthenticatedAs -> AuthenticatedEmail(a@test.de), ... })
我的 Scala 版本是 2.12.6,Play Framework 版本是 2.6.18。非常感谢任何帮助。
【问题讨论】:
-
Controller中的println是否要使用AuthenticatedAsAttr? (也检查
requestHeader.addAttr> 简化你的代码) -
@pme println 位于控制器中,我想在其中访问属性但获取无。所以我通过 println 看到 AuthenticatedAs -> .. 的映射在 attrs 中,但没有得到值。
标签: scala playframework