如何将自定义对象从 Play Framework 过滤器传递给控制器​​?

How to pass custom objects from Play Framework filters to controllers?

我想将自定义对象从我的游戏基本过滤器传递到我的控制器。我怎样才能做到这一点。

示例过滤器:

class CustomFilter @Inject() (implicit val mat: Materializer) extends Filter {
  def apply(nextFilter: RequestHeader => Future[Result])(requestHeader: RequestHeader): Future[Result] = {
    // along with request header I want to pass a custom object
    nextFilter(requestHeader)
  }
}

你可以使用 Request Attributes:

object Attrs {
  val whatever: TypedKey[WhatEver] = TypedKey.apply[WhatEver]("we")
}

// in your filter:
val newReq = req.addAttr(Attrs.whatever, WhatEver(...))
nextFilter(newReq)

// in your action function:
val whatever: WhatEver = req.attrs(Attrs.WhatEver) 
// OR -- for extra safety
val whatever: Option[WhatEver] = req.attrs.get(Attrs.WhatEver)