Как запустить httpFilters в playframework 2.4

Я пытаюсь создать приложение на Playframework 2.4 с macwire DI, и у меня проблема с httpFilters из Play! Вот пример того, что я пытаюсь сделать

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 не работает. Я получаю ответ без заголовка "Пример"

2 ответа

Похоже, что я нашел решение

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

просто переопределите httpFilters из черты BuiltInComponents (как выше) и измените ExampleFilter на объект, и он работает

Похоже, ваш Filters находится в неназванном (по умолчанию) пакете. Положите его где-нибудь в упаковке, как appfilters.Filters,

Так

package appfilters

...

class Filters(ex:ExampleFilter) extends HttpFilters {

...

а также

play.http.filters = appfilters.Filters 
Другие вопросы по тегам