如何在Play Framework 2.2中创建Action

时间:2013-11-19 23:05:55

标签: playframework playframework-2.0

我正在阅读James Ward的代码,了解如何使用authToken(https://github.com/jamesward/play-rest-security)为API端点设置一些基本安全性。

有一个SecurityController类扩展Action.Simple。在其中,有call()方法作为实际http调用和控制器之间的代理。我遇到的问题是,显然此方法的返回类型在play框架版本2.2中已更改,现在返回Promise<SimpleResult>而不是Promise

这是一个有问题的方法无法编译,因为当我尝试return unauthorized("unauthorized");

时类型不匹配
public Promise<play.mvc.SimpleResult> call(Http.Context ctx) throws Throwable {
    User user = null;
    String[] authTokenHeaderValues = ctx.request().headers().get(AUTH_TOKEN_HEADER);
    if ((authTokenHeaderValues != null) && (authTokenHeaderValues.length == 1) && (authTokenHeaderValues[0] != null)) {
        user = models.User.findByAuthToken(authTokenHeaderValues[0]);
        if (user != null) {
            ctx.args.put("user", user);
            return delegate.call(ctx);
        }
    }
    return unauthorized("unauthorized"); // type mismatch here
}

如何在Play 2.2中使用此代码?感谢

1 个答案:

答案 0 :(得分:13)

我对Play的Java API不太熟悉,但看起来unauthorized()会返回SimpleResult

您需要一个Promise<SimpleResult>,通过以下方式(通过this question的答案)可以获得:

return F.Promise.pure((SimpleResult) unauthorized("unauthorized"));