再生アプリケーションを2.4.6から2.5.8に移行しています。私はプレイ2.5.Xのフィルタを使用することに固執しています。
リクエストを認証するRequestHandlerと、すべてのレスポンスにフィルタを適用するフィルタを作成しました。フィルタが動作していません2.5.X
@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*/
}
私はできる午前:
後に続いてapplication.conf
play.http.requestHandler="utils.RequestHandler"
play.http.filters="utils.Filters"
の私のエントリは私のFilter.scalaされていますプレイアプリケーションを実行するには、フィルタは動作しません(RequestHandlerは直感的に)。
application.confのplay.http.requestHandler = "utils.RequestHandler"にコメントしたところ、フィルタが機能し始めました。
私はもっと多くを試して、RequestHandlerとFiltersの1つだけが一度に動作することを観察しました。 >フィルタのみが
2のみのRequestHandler作品(ルートパッケージのFilter存在)設定されている - - (両ルートパッケージに含まれていない)フィルタとのRequestHandlerが設定されている
1>のみのRequestHandlerは
に動作します:
次は私の観察であります 3.フィルタのみが(ルートパッケージ内のRequestHandlerの存在)設定されている - >だけのRequestHandlerは、フィルターの
4.なしに動作していないとのRequestHandlerは(どちらも、ルートパッケージに存在している)ように構成されている - >のみのRequestHandlerは
NOTE作品:設定済みの手段を私はapplication.confにエントリーを持っています
私はここで何が欠けているか知りたいです。
'HttpRequestHandler'の代わりに' DefaultHttpRequestHandler'を拡張しようとしましたか? – rethab
@rethab: 'DefaultHttpRequestHandler'を拡張するために' RequestHandler'を修正しましたが、まだ効果はありません。 'RequestHandler'だけが動いています。それはあなたのために働いたのですか? – Shailesh
私たちは2.5ではありません。私はデバッガを添付することをお勧めします。 – rethab