Библиотека Deadbolt-2 - это решение. Однако, если вы хотите создать свой собственный, во-первых, вам нужно прочитать https://www.playframework.com/documentation/2.4.x/ScalaActionsComposition.
На самом деле, это не так сложно, и вы можете реализовать почти неограниченное, очень гибкое решение.
Основная идея заключается в том, чтобы определить UserAuthAction, как:
@Singleton
class UserAuthAction @Inject() (principalService: PrincipalService) extends ActionBuilder[Request] with ActionFilter[Request] {
override protected def filter[A](request: Request[A]) = Future.successful {
request.session.get(principalService.accessTokenCacheKey).map { accessToken =>
if (principalService.authenticate(accessToken))
None
else
Some(Results.Redirect(routes.PrincipalController.login()))
} getOrElse {
Some(Results.Redirect(routes.PrincipalController.login()))
}
}
}
А затем компоновать его с действиями делают на самом деле работу. Например:
@Singleton
class Application @Inject() (userAuthAction: UserAuthAction) extends Controller {
def index = (userAuthAction andThen anyAction) { request =>
Ok(views.html.index())
}
}
По пути, если вы используете ActionRefiner, вы даже можете извлечь дополнительную информацию о пользователе и предоставить его последние действия, такие как anyAction выше.
Если вы выберете Deadbolt 2, взгляните на [руководство по быстрому старту] (https://github.com/schaloner/deadbolt-2-java/blob/master/QuickStart.md) –