2016-10-18 9 views
0

再生アプリケーションを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にエントリーを持っています
私はここで何が欠けているか知りたいです。

+0

'HttpRequestHandler'の代わりに' DefaultHttpRequestHandler'を拡張しようとしましたか? – rethab

+0

@rethab: 'DefaultHttpRequestHandler'を拡張するために' RequestHandler'を修正しましたが、まだ効果はありません。 'RequestHandler'だけが動いています。それはあなたのために働いたのですか? – Shailesh

+0

私たちは2.5ではありません。私はデバッガを添付することをお勧めします。 – rethab

答えて

1

私はRequestHandlerFilterがお互いに機能しないと思います。
Play 2.5.Xで新規プロジェクトを作成しました。デフォルトでFilterが適用されています。私はRequestHandlerを新しいプロジェクトに追加し、Filterが機能しなくなったことを確認しました。
間違いなくReqestHandlerFiltersに何らかの関係があるはずです。
誰かがRequestHandlerFilterの両方を持っている場合はどうか説明してください。

関連する問題