2016-03-07 51 views
2

我正在嘗試在帶有macwire DI的Playframework 2.4上構建應用程序,並且我從Play中遇到了httpFilters問題!這裏就是我試圖做一個例子如何在playframework中運行httpFilters 2.4

class ExampleFilter extends Filter { 
    def apply(nextFilter: RequestHeader => Future[Result]) 
      (requestHeader: RequestHeader): Future[Result] = { 
    nextFilter(requestHeader).map { result => 
     result.withHeaders("Example" -> "test") 
    } 
    } 
} 

class Filters(ex:ExampleFilter) extends HttpFilters { 
    val filters = Seq(ex) 
} 

DI模塊

trait Module extends EhCacheComponents with BuiltInComponents { 

    lazy val exampleFilter = wire[ExampleFilter] 
    lazy val filters = wire[Filters] 

Loader類

class Loader extends ApplicationLoader { 
    def load(context: Context) = { 
    new MyComponents(context).application 
    } 
} 

class MyComponents(context: Context) extends BuiltInComponentsFromContext(context) with Module { 
    lazy val router: Router = wire[Routes] withPrefix "/" 
} 

application.conf的一部分,是

play.http.filters = Filters 

和ExampleFilter不起作用。我得到沒有「示例」標題的響應

+0

你在application.conf中配置了你的應用程序加載器嗎? play.application.loader = Loader – rethab

+0

是的,一切正常,除了那些過濾器 – mrxelik

回答

0

它看起來像你的Filters是在未命名(默認)包。把它放在包裏的某個地方,比如appfilters.Filters

所以

package appfilters 

... 

class Filters(ex:ExampleFilter) extends HttpFilters { 

... 

play.http.filters = appfilters.Filters 
+0

我試過這個,但它仍然不工作 – mrxelik

1

它看起來像我已經找到了解決辦法

class MyComponents(context: Context) extends BuiltInComponentsFromContext(context) with Module { 
    override lazy val httpFilters = Seq(ExampleFilter) 
    lazy val router: Router = wire[Routes] withPrefix "/" 
} 

,只是覆蓋httpFiltersBuiltInComponents性狀(如ABO ve),並更改ExampleFilter到對象,它的工作原理

相關問題