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

时间:2015-01-07 12:41:40

标签: java http url redirect playframework-2.2

我正在使用play 2.2.x并且我正在开发一个项目。我想在AdminController类中定义的某些操作(方法)之前检查admin是否在会话中。所以如果用户没有登录并尝试输入在浏览器中管理网址,他应该被重定向到特定页面,例如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());
        }
    }

但上面的代码给出了不兼容类型编译错误。

那我怎样才能重定向网址?

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:1)

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