To achieve this, you can use Action Composition . From the documentation:
import play.api.mvc._ class AuthenticatedRequest[A](val username: String, request: Request[A]) extend WrappedRequest[A](request) object Authenticated extends ActionBuilder[AuthenticatedRequest] { def invokeBlock[A](request: Request[A], block: (AuthenticatedRequest[A]) =>Future[SimpleResult]) = { request.session.get("username").map { username => block(new AuthenticatedRequest(username, request)) } getOrElse { Future.successful(Forbidden) } } }
And then you can just do:
def index = Authenticated { Ok(views.html.index("index")) }
Alternatively, you can configure the filter instead (as suggested by @Robin Green):
object AuthFilter extends Filter { override def apply(next: RequestHeader => Result)(rh: RequestHeader): Result = { rh.session.get("username").map { user => next(rh) }.getOrElse { Redirect("/login") } }
In Global.scala scala add
override def doFilter(action: EssentialAction) = AuthFilter(action)
For more information about filters, see white papers .
mantithetical
source share