2016-10-18 39 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*/ 
} 

我能運行播放應用程序,但過濾器不起作用(RequestHandler作品co rrectly)。

當我從application.conf中註釋play.http.requestHandler =「utils.RequestHandler」時,過濾器開始工作。

我嘗試了更多,並發現只有一個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

我認爲RequestHandlerFilter不能相互工作。
我在Play 2.5.X中創建了一個新項目,默認應用Filter。我在新項目中添加了RequestHandler,並觀察到Filter停止工作。
當然,在ReqestHandlerFilters之間應該有一些關係。
如果有人得到了RequestHandlerFilter,請解釋如何。