【问题标题】:How to create an Action in Play Framework 2.2如何在 Play Framework 2.2 中创建动作
【发布时间】:2013-11-20 09:24:45
【问题描述】:

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

有一个 SecurityController 类扩展 Action.Simple。其中,有一个call() 方法充当实际http 调用和控制器之间的代理。我遇到的问题是,显然这个方法的返回类型在播放框架版本 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 中工作?谢谢

【问题讨论】:

    标签: playframework playframework-2.0


    【解决方案1】:

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

    你需要一个Promise&lt;SimpleResult&gt;,它(通过this question的答案)似乎可以通过以下方式获得:

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

    【讨论】:

    • 是的,效果很好。很遗憾看到这个框架缺少多少文档。
    猜你喜欢
    • 1970-01-01
    • 2014-01-16
    • 2015-12-08
    • 1970-01-01
    • 1970-01-01
    • 2013-11-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多