2016-10-17 7 views
1

Play(Scala)2.5.Xを使用するようにサービスをアップグレードしています。私はすべての回答にフィルタを適用することに固執しています。
次は私が「utils.SimpleHttpRequestHandler」で行われ、期待通りに動作している各要求を認証していますapplication.conf
再生中のフィルタを作成する2.5.X

play.http.requestHandler = "utils.SimpleHttpRequestHandler" 
play.http.filters="utils.CustomFilter" 

に追加されたエントリです。ただし、フィルターを使用して応答にヘッダーを追加することはできません。
次は私のutils.CustomFilterです:後

@Singleton 
class CustomFilter @Inject() (implicit val mat: Materializer) extends DefaultHttpFilters { 
    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 = { 
    val calendar = Calendar.getInstance() 
    val dateFormat = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss z") 
    dateFormat.setTimeZone(calendar.getTimeZone) 
    dateFormat.format(calendar.getTime()) 
    } 
} 

は私utils.SimpleHttpRequestHandlerです:私は遊びアプリを実行すると

@Singleton 
class SimpleHttpRequestHandler @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*/ 
} 

、私は、唯一の問題を警告またはエラーを取得しておりませんフィルタが機能していないということです。 私は何が欠けているのか、私は何をしていますか?

答えて

0

CustomFilterFilterなくDefaultHttpFilters

あなたがfilterを適用していないように見えますし、またあなたのapplication.confエントリが間違っているを拡張する必要があります。

package foo 

class Filters @Inject() (customFilter: CustomFilter) extends DefaultHttpFilters(customFilter) 

あなたapplication.confエントリはplay.http.filters=foo.Filters

+0

ご意見ありがとうございます。 'Filter'code' 更新application.confエントリ play.http.filters = "utils.Filters" 延び:は、customFilter @Inject()(Materializer暗黙ヴァルマット)code'class' : 私はにCstomFilterを変更しました@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@? – Shailesh

+0

あなたの提案をありがとう。クラスは、customFilter @Inject()(暗黙ヴァルマット:Materializer)は私がは、customFilterを変更
フィルタ
更新application.confエントリplay.http.filters = "utils.Filters"
クラスは(@Injectをフィルタリングして延び()は、customFilter :CustomFilter)extends DefaultHttpFilters(customFilter)
しかし、ヘッダーは応答に追加されません。
Shailesh

+0

ご意見ありがとうございます。 CustomFilterを次のように変更しました:class CustomFilter @Inject()(暗黙的なvalマット:マテリアライザー)extends filter 更新されたapplication.confエントリplay.http.filters = "utils.Filters" クラス@Inject()(customFilter:CustomFilter) DefaultHttpFilters(customFilter) しかし、ヘッダーは応答に追加されません。 – Shailesh

0

https://github.com/playframework/playframework/blob/master/framework/src/play/src/main/scala/play/api/http/HttpRequestHandler.scala#L180 からソースコードを参照し、コメントする必要があります。

/** *ハンドラが実行されたときにように与えられたハンドラを更新して任意のフィルタを意志また走る。 *デフォルトの動作では、filterActionを呼び出してすべての[[play.api.mvc.EssentialAction]]をラップしますが、 *他の種類のハンドラは変更しないでください。もしアクションがEssentialActionではありませんので、あなたのフィルタが適用されない */

protected def filterHandler(request: RequestHeader, handler: Handler): Handler = { 
handler match { 
    case action: EssentialAction if inContext(request.path) => filterAction(action) 
    case handler => handler 
} 

}

理由があります。

関連する問題