【问题标题】:How to redirect request in play framework with scala?如何使用scala重定向播放框架中的请求?
【发布时间】:2023-03-18 17:59:01
【问题描述】:

我正在使用播放框架 2.5。在我的应用程序中,我想拦截每个请求以检查该请求的会话中是否存在任何用户。如果用户不存在,则请求重定向到登录页面。那么,我的问题是如何在我的应用程序中实现它?

提前非常感谢您。

【问题讨论】:

    标签: scala playframework-2.5


    【解决方案1】:

    检查合适的用户后

    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)
    }
    

    您会注意到在我的情况下我返回 Unauthorized,但您可以轻松地将其替换为您正在寻找的重定向。

    【讨论】:

    • 非常感谢@andyczerwonka。根据您的回答,我有了一个想法并解决了我的问题。
    • @Govardhan 如果有帮助,您应该接受答案
    猜你喜欢
    • 2018-03-05
    • 1970-01-01
    • 2021-08-05
    • 2016-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多