Я переношу игру с 2.4.6 до 2.5.8. Я застрял в использовании фильтров в игре 2.5.X.
Я создал RequestHandler, который аутентифицирует запрос и фильтры, которые должны применять фильтр для всех ответов.
Фильтры, не работающие в игре 2.5.X
Ниже приведены мои записи в application.conf
play.http.requestHandler="utils.RequestHandler"
play.http.filters="utils.Filters"
После мой Filter.scala:
@Singleton
class Filters @Inject() (customFilter: CustomFilter) extends DefaultHttpFilters(customFilter)
@Singleton
class CustomFilter @Inject() (implicit val mat: Materializer) extends Filter {
def apply(nextFilter: RequestHeader => Future[Result])(requestHeader: RequestHeader): Future[Result] = {
nextFilter(requestHeader).map { result =>
result.withHeaders(
PRAGMA -> "no-cache",
CACHE_CONTROL -> "no-cache, no-store, must-revalidate, max-age=0",
EXPIRES -> serverTime
)
}
}
private def serverTime = { /* CODE */}
}
Ниже мой RequestHandler.scala
@Singleton
class RequestHandler @Inject() (router: Router) extends HttpRequestHandler {
def handlerForRequest(request: RequestHeader) = {
router.routes.lift(request) match {
case Some(handler) =>
val response = authenticate(request)
response match {
case Ok => (request, handler)
case Forbidden => (request, controllers.Application.forbidden)
case Unauthorized => (request, controllers.Application.unauthorized)
case _ => (request, controllers.Application.badRequest)
}
case None => (request, Action(Results.NotFound))
}
}
/* OTHER HELPER METHOD CODE*/
}
Я могу для запуска play-приложения, однако фильтр не работает (RequestHandler работает co rrectly).
Когда я прокомментировал play.http.requestHandler = "utils.RequestHandler" из application.conf, начали работать фильтры.
Я пробовал больше и заметил, что только один из RequestHandler и Filters работает одновременно.
Ниже мое наблюдение:
1. Фильтр и RequestHandler настроены (Оба не в корневом пакете) -> Только фильтр работает
2. Только RequestHandler настроен (фильтр, присутствующий в корневом пакете) -> Только RequestHandler работает
3. только фильтр настроен (RequestHandler присутствует в корневом пакете) -> только RequestHandler работает
4. ни один из фильтра и RequestHandler сконфигурирован (оба присутствуют в корневом пакете) -> только RequestHandler работает
ПРИМЕЧАНИЕ: настроен средства У меня есть запись в application.conf
Я хочу знать, чего я здесь не вижу.
Вы пробовали расширять 'DefaultHttpRequestHandler' вместо' HttpRequestHandler'? – rethab
@rethab: Я модифицировал 'RequestHandler' для расширения' DefaultHttpRequestHandler', но все равно никакого эффекта. Работает только 'RequestHandler'. Это сработало для вас? – Shailesh
Мы не на 2.5. Я предлагаю установить отладчик. – rethab