如何使用scala在play框架中重定向请求?

如何使用scala在play框架中重定向请求?,scala,playframework-2.5,Scala,Playframework 2.5,我正在使用play framework 2.5。在我的应用程序中,我希望拦截每个请求,以检查是否有任何用户存在于该请求的会话中。如果用户不存在,则请求重定向到登录页面。所以,我的问题是如何在我的应用程序中实现它 事先非常感谢 检查合适的用户后 Redirect(routes.Application.login()) 我不会对您的身份验证策略做任何假设,但他是一个简单的基于令牌的身份验证策略,我在每次请求时都会使用它 object UserAuthenticator extends Contro

我正在使用play framework 2.5。在我的应用程序中,我希望拦截每个请求,以检查是否有任何用户存在于该请求的会话中。如果用户不存在,则请求重定向到登录页面。所以,我的问题是如何在我的应用程序中实现它


事先非常感谢

检查合适的用户后

Redirect(routes.Application.login())
我不会对您的身份验证策略做任何假设,但他是一个简单的基于令牌的身份验证策略,我在每次请求时都会使用它

object UserAuthenticator extends Controller {

  case class UserAuthenticatedRequest[A](user: User, authToken: String, request: Request[A]) extends WrappedRequest(request)

  def userAuthenticated[A](p: BodyParser[A])(f: UserAuthenticatedRequest[A] => Result) = {
    Action(p) { implicit request =>
      request.headers.get(AUTHORIZATION).map(_.split(" ")) match {
        case Some(Array(k, v)) if k == "auth-token" => findUserByAuthToken(v).map(user => f(UserAuthenticatedRequest(user, v, request))).getOrElse(Unauthorized)
        case _ => Unauthorized
      }
    }
  }

  def userAuthenticated(f: UserAuthenticatedRequest[AnyContent] => Result): Action[AnyContent] = {
    userAuthenticated(parse.anyContent)(f)
  }
使用上述功能,我的控制器可以执行以下操作:

def myControllerMethod = userAuthenticated { request =>
  doSomethingWith(request.user)
}

你会注意到在我的例子中,我返回了未经授权的
,但是你可以很容易地用你正在寻找的重定向来替换它。

非常感谢@andyczerwonka。根据你的回答,我有了一个想法,解决了我的问题。@Govardhan如果有帮助的话,你应该接受这个答案