我正在阅读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中使用此代码?感谢
答案 0 :(得分:13)
我对Play的Java API不太熟悉,但看起来unauthorized()
会返回SimpleResult
。
您需要一个Promise<SimpleResult>
,通过以下方式(通过this question的答案)可以获得:
return F.Promise.pure((SimpleResult) unauthorized("unauthorized"));