在新特性中实现 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的主要内容,如果未能解决你的问题,请参考以下文章

Jupyter:如何在新内核中实现图像查看功能

在 CoreBluetooth.framework 中实现读/写特性

JavaScript 在新窗口中检查和对象并显示特性和方法

细说 Swift 4.2 新特性:Dynamic Member Lookup

游戏开发在Lua中实现面向对象特性——模拟类继承多态

JDK8 新特性流式数据处理