2016-10-18 4 views
0

Я переношу игру с 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
Я хочу знать, чего я здесь не вижу.

+0

Вы пробовали расширять 'DefaultHttpRequestHandler' вместо' HttpRequestHandler'? – rethab

+0

@rethab: Я модифицировал 'RequestHandler' для расширения' DefaultHttpRequestHandler', но все равно никакого эффекта. Работает только 'RequestHandler'. Это сработало для вас? – Shailesh

+0

Мы не на 2.5. Я предлагаю установить отладчик. – rethab

ответ

1

Я думаю, RequestHandler и Filter не работают друг с другом.
Я создал новый проект в Play 2.5.X, который по умолчанию применяется Filter. Я добавил RequestHandler в новый проект и заметил, что Filter перестали работать.
Определенно должно быть какое-то отношение в ReqestHandler и Filters.
Если у кого-то есть и RequestHandler и Filter работа пожалуйста, объясните, как.