Play Framework 2.2如何在覆盖调用操作中设置响应状态代码



我想创建一个将在一些控制器中调用的工作站,用于检查身份验证。

在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的响应,你能帮我解决这个问题吗。

试试这个:

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

最新更新