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

Redirect a request to specific action in controller inside public F.Promise<SimpleResult> call(Http.Context ctx){}

我正在使用 play 2.2.x 并且我正在研究 project.I 想在我的 AdminController class.So 中定义的某些操作(方法)之前检查管理员是否在会话中如果用户未登录并尝试在浏览器中输入 adminpage url,他应该被重定向到特定页面,比如 login.scala.html。

我的代码 (Source)

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

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

那么如何重定向 url?

如有任何帮助,我们将不胜感激。

redirect 调用没有 return 一个 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()));
    }
}