2016-12-25 2 views
0

私はScala Playアプリケーションで作業しています。レスポンスのHTTPヘッダーにパラメータを設定して、ブラウザのキャッシュを無効にする多くのコントローラアクションが必要です。Scala Play 2.5 Deadbolt-2でのアクションの構成

package action 

import be.objectify.deadbolt.scala.AuthenticatedRequest 
import play.api.http.HeaderNames 
import play.api.mvc._ 

import scala.concurrent.Future 
import scala.util.Success 

case class NoCache[A](action: Action[A]) extends Action[A] with HeaderNames { 
    def apply(request: AuthenticatedRequest[A]): Future[Result] = { 
    action(request).andThen { 
     case Success(result) => result.withHeaders(
     (CACHE_CONTROL -> "no-cache, no-store, must-revalidate"), 
     (PRAGMA -> "no-cache"), 
     (EXPIRES -> "0") 
    ) 
    } 
    } 

    lazy val parser = action.parser 
} 

しかし、それはこの中でミックスしようとしてコンパイルされません。私もデッドボルト-2を使用して(とデッドボルト-2のAuthenticatedRequest[_]を必要とする)していますので、私はそれがこのようになりますNoCache複合アクションを作成することを決定し、私のコントローラアクションの実装へのアクション

def link = deadbolt.SubjectPresent()() andThen NoCache() { implicit request => 

または

def link = NoCache(deadbolt.SubjectPresent()()) { implicit request => 

が、それらを構成する方法を見ることができない...

答えて

0

私は単一のアクションのためにそれを行う方法が見つかりました:

def index = NoCache { 
    deadbolt.WithAuthRequest()() { implicit request => 
    Future { 
     Ok(views.html.index(userService)) 
    } 
    } 
} 

しかし、 、私はまだコントローラクラス全体にNoCacheを適用する方法を見つけていません。

関連する問題