There was an error while loading. Please reload this page.
play2.auth use stackable-controller
Suppose you want to validate a token at every action in order to defeat a Cross Site Request Forgery attack.
Since it is impractical to perform the validation in all actions, you would define a trait like this:
trait TokenValidateElement extends StackableController { self: Controller => private val tokenForm = Form("token" -> text) private def validateToken(request: Request[AnyContent]): Boolean = (for { tokenInForm <- tokenForm.bindFromRequest(request).value tokenInSession <- request.session.get("token") } yield tokenInForm == tokenInSession).getOrElse(false) override proceed[A](reqest: RequestWithAttributes[A])(f: RequestWithAttributes[A] => Result): Result = { if (validateToken(request)) super.proceed(request)(f) else BadRequest } }
You can use TokenValidateElement trait with AuthElement trait.
TokenValidateElement
AuthElement
object Application extends Controller with TokenValidateElement with AuthElement with AuthConfigImpl { def page1 = StackAction(AuthorityKey -> NormalUser) { implicit request => // do something Ok(html.page1("result")) } def page2 = StackAction(AuthorityKey -> NormalUser) { implicit request => // do something Ok(html.page2("result")) } }