在新特性中实现 WithFilters
Posted
技术标签:
【中文标题】在新特性中实现 WithFilters【英文标题】:Implementing WithFilters in a new trait 【发布时间】:2014-09-03 22:38:28 【问题描述】:this article 的使用过滤器部分解释了如何在 Play Framework 全局对象上实现过滤器。
object Global extends WithFilter(AccessLog)
object AccessLog extends Filter
override def apply(next: RequestHeader => Future[Result])(request: RequestHeader): Future[Result] =
val result = next(request)
play.Logger.info(request + "\n\t => " + result)
result
(see framework source code here - line 93)
我正在创建自己的扩展 GlobalSettings 的特征,并且在 doFilter 方法中我希望访问 Filter.apply() 可用的请求参数,但 GlobalSettings 的方法声明如下
override def doFilter(next: RequestHeader => Handler): (RequestHeader => Handler) =
play.Logger.debug("doFilter:")
super.doFilter(next)
重写上述方法时如何获取RequestHeader参数?
【问题讨论】:
【参考方案1】:doFilter 方法有两个参数集,第二个参数集仅包含一个隐式请求,因此必须像这样将其推送到覆盖的方法中......
override def doFilter(next: RequestHeader => Handler): (RequestHeader => Handler) =
request =>
play.Logger.debug("doFilter: " + request)
super.doFilter(next)(request)
【讨论】:
我认为,当您为您的意图添加一些解释时,对 OP 和其他访问者来说会更有趣。 在答案或问题中? 我的评论与您的回答有关。并且不要忘记将您的答案标记为已接受;-) 您认为我现在添加的解释是否足够? PS:再过 13 个小时都无法接受我自己的答案。 在我看来是的。你已经给出了一个理由,你为什么要走这条路。当你现在阅读你的答案时,它比仅仅几行代码更有意义。以上是关于在新特性中实现 WithFilters的主要内容,如果未能解决你的问题,请参考以下文章
在 CoreBluetooth.framework 中实现读/写特性