将请求重定向到公共 F.Promise<SimpleResult> 调用(Http.Context ctx)内控制器中的特定操作{}



我正在使用play 2.2.x,我正在做一个项目。我想在我的 AdminController 类中定义的某些操作(方法)之前检查管理员是否在会话中。因此,如果用户未登录并尝试在浏览器中输入adminpage url,则应将他重定向到特定页面,例如login.scala.html。

我的代码(源)

 public F.Promise<SimpleResult> call(Http.Context ctx) throws Throwable {
        if (check if user is in session) {
              return delegate.call(ctx);
        } else {
            return redirect(routes.AdminController.login());
        }
    }

但是上面的代码给了我一个不兼容的类型编译错误。

那么如何重定向网址呢?

任何帮助将不胜感激。

redirect调用不返回F.Promise,因此类型错误。您可以使用以下pure来包装重定向调用:

public F.Promise<SimpleResult> call(Http.Context ctx) throws Throwable {
    if (/* your condition */) {
       return delegate.call(ctx);
    } else {
       return F.Promise.pure(redirect(routes.AdminController.login()));
    }
}

相关内容

最新更新