【问题标题】:Scala Play framework enable only certain filtersScala Play 框架仅启用某些过滤器
【发布时间】:2017-10-12 03:15:21
【问题描述】:

我正在尝试仅启用一个播放过滤器,同时禁用其他过滤器(如主机过滤或 CSRF 过滤)。

这是我的application.conf file

play.http.filters=<filter that I am enabling>
play.filters.disabled+=play.filters.hosts.AllowedHostsFilter
play.filters.disabled+=play.filters.csrf.CSRFFilter

似乎在我在一开始添加play.http.filters=&lt;filter that I am enabling&gt; 行之后,禁用的过滤器再次启用,因为我看到了熟悉的错误消息:

Illegal 'x-forwarded-for' header: Invalid input ':', expected listSep or 'EOI' (line 1, column 13)

在scala play框架中禁用某些过滤器和启用某些过滤器的正确方法是什么?

【问题讨论】:

    标签: scala filter playframework


    【解决方案1】:

    在 play 2.6 中,禁用/启用默认过滤器由 changig application.conf 完成。要启用默认过滤器,应添加play.filters.enabled。要禁用默认过滤器,您应该添加play.filters.disabled

    我认为这里有些混乱。 play.http.filters 应该是应用程序中类的完全限定类名。此类负责启用/禁用过滤器。这是一个简单的过滤器示例,它尊重 play.filters.enabled/disabled 配置:

    import javax.inject.{Inject, Singleton}
    
    import play.api.http.DefaultHttpFilters
    import play.api.http.EnabledFilters
    import play.api.mvc.{EssentialAction, EssentialFilter}
    
    import scala.concurrent.ExecutionContext
    
    // Our example filter
    @Singleton
    class ExampleFilter @Inject()(implicit ec: ExecutionContext) extends EssentialFilter {
      override def apply(next: EssentialAction) = EssentialAction { request =>
        next(request).map { result =>
          result.withHeaders("X-ExampleFilter" -> "foo")
        }
      }
    }
    
    // All our filters
    class Filters @Inject()(
       defaultFilters: EnabledFilters, // respect play.filters.enabled and play.filters.disabled
       exampleFilter: ExampleFilter, // you can pass user-defined filter
    ) extends DefaultHttpFilters(defaultFilters.filters: _*)
    

    【讨论】:

    • 谢谢。但是,我想要的唯一过滤器不是默认过滤器,而是来自 3rd 方库的过滤器。看起来 play.filters.enabled 仅适用于默认播放过滤器。在这种情况下,我怎么能不启用默认过滤器?谢谢
    【解决方案2】:

    在 Play 2.6 中,您应该能够按照 documentation 中的说明执行 play.filters.enabled=[youDesiredFilter]

    只会启用该列表中的过滤器。如果未列出所有默认过滤器,它们将被禁用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-01-21
      • 2019-04-11
      • 2016-08-17
      • 1970-01-01
      • 2014-07-01
      • 1970-01-01
      • 2016-07-08
      相关资源
      最近更新 更多