I am migrating play application from 2.4.6 to 2.5.8. I am stuck at using filters in play 2.5.X.
I have created RequestHandler which authenticates request and Filters which should apply filter to all responses.
Following are my entries in application.conf
play.http.requestHandler="utils.RequestHandler"
play.http.filters="utils.Filters"
Following is my 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 */}
}
Following is my 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*/
}
I am able to run play-application, however filter doesn't work(RequestHandler works correctly).
When I commented play.http.requestHandler="utils.RequestHandler" from application.conf, filters started working.
I tried more and observed that only one of RequestHandler and Filters works at a time.
Following is my observation:
1. Filter and RequestHandler are configured(Both are not in root package) -> Only Filter works
2. Only RequestHandler is configured(Filter present in root package) -> Only RequestHandler works
3. Only Filter is configured(RequestHandler present in root package) -> Only RequestHandler works
4. None of Filter and RequestHandler is configured(Both are present in root package) -> Only RequestHandler works
NOTE: Configured means I have entry in application.conf
I want to know what I am missing here.