2016-03-07 9 views
2

Я пытаюсь создать приложение на Playframework 2.4 с macwire DI, и у меня есть проблема с httpFilters из Play! Вот пример того, что я пытаюсь сделатьКак запустить httpFilters в playframework 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] 

погрузчик класса

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 "/" 
} 

, просто переопределить httpFilters от BuiltInComponents признака (например, Або ve) и изменить ExampleFilter на объект, и он работает