【问题标题】:Implementing WithFilters in a new trait在新特性中实现 WithFilters
【发布时间】: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参数?

【问题讨论】:

    标签: scala playframework


    【解决方案1】:

    doFilter 方法有两个参数集,第二个参数集仅包含一个隐式请求,因此必须像这样将其推送到覆盖的方法中......

      override def doFilter(next: RequestHeader => Handler): (RequestHeader => Handler) = {
        request => {
          play.Logger.debug("doFilter: " + request)
          super.doFilter(next)(request)
        }
      }
    

    【讨论】:

    • 我认为,当您为您的意图添加一些解释时,对 OP 和其他访问者来说会更有趣。
    • 在答案或问题中?
    • 我的评论与您的​​回答有关。并且不要忘记将您的答案标记为已接受;-)
    • 您认为我现在添加的解释是否足够? PS:再过 13 个小时都无法接受我自己的答案。
    • 在我看来是的。你已经给出了一个理由,你为什么要走这条路。当你现在阅读你的答案时,它比仅仅几行代码更有意义。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-02-07
    • 2020-04-04
    • 1970-01-01
    • 1970-01-01
    • 2014-02-27
    • 1970-01-01
    • 2021-09-26
    相关资源
    最近更新 更多