我想创建一个将在某些控制器中调用以进行身份验证的anotation。
在2.1之前的旧游戏版本中,我使用以下代码来覆盖Play的调用操作:
public class OAuth2Action extends Action<OAuth2> {
// ...
@Override
public Result call(Http.Context context) throws Throwable
{
if (authorization == null )
return unauthorized(ACCESS_TOKEN_NOT_FOUND);
return delegate.call(context);
}
}
它返回Result然后它可以很容易地返回未使用http状态代码401的未授权响应,如在Controller
中在游戏中2.2调用方法已更改,必须返回F.Promise
我写了以下内容以使其有效:
public class OAuth2Action extends Action<OAuth2> {
// ...
@Override
public F.Promise<SimpleResult> call(Http.Context context) throws Throwable {
if (authorization == null ) {
// return unauthorized(ACCESS_TOKEN_NOT_FOUND); // Now i can't use this
// I can set Header, Content type, cookies, BUT NOT STATUS CODE
context.response().setHeader("Header", "test");
}
return delegate.call(context);
}
}
我希望以状态代码401返回回复,您能否帮我解决此问题。
答案 0 :(得分:2)
试试这个:
public class OAuth2Action extends Action<OAuth2> {
// ...
@Override
public F.Promise<SimpleResult> call(Http.Context ctx) throws Throwable {
if (authorization == null ) {
return F.Promise.promise(new F.Function0<SimpleResult>() {
@Override
public SimpleResult apply() throws Throwable {
return unauthorized(ACCESS_TOKEN_NOT_FOUND);
}
});
}
return delegate.call(ctx);
}
}