Композиция Scala Play 2.5 Action с действиями Deadbolt-2

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

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 =>

но не вижу, как их составить...

1 ответ

Решение

Я нашел, как это сделать за одно действие:

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

Тем не менее, я до сих пор не нашел, как подать заявку NoCache на весь класс контроллера.

Другие вопросы по тегам