2016-12-25 9 views
0

Я работаю над приложением Scala Play и нуждаюсь во многих действиях контроллера, отключающих кеширование браузера, задав параметры в HTTP-заголовках Response. Я решил создать NoCache композиционное действие и, поскольку я также использую Deadbolt-2 (и нужен засов-2-х AuthenticatedRequest[_]) выглядит следующим образом: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 
} 

, но тогда это не будет компилироваться пытаться смешивать в этом Действие в моих реализациях действий контроллера, например

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 ко всему классу контроллера.