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

标签 java playframework-2.2

我想创建一个注释,该注释将在某些 Controller 中调用以检查身份验证。

在 2.1 之前的较旧 Play 版本中,我使用以下代码来覆盖 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);
    }
}

它返回结果,然后它可以很容易地返回带有 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);
    }
}

关于java - Play Framework 2.2 如何设置响应覆盖调用操作中的状态代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20094188/

相关文章:

java - ResponseHandler 无法在 Android 的 SOAP Web 服务中工作?

java - Openshift,一个调用另一个 web 服务的 web 服务

java - 为什么不从实体层次结构来创建 dto?

java - 玩2.2 不带插件启动DefaultApplication

Scala Play 框架 2.2 - 如何在模板中获取有关用户登录状态的信息

scala - 为什么我不能在 Play Framework 2 View 中将 Scala 代码与 HTML 混合?

java - maxUploadsize 和 maxInMemorySize 之间的区别

java - Spring @ResponseStatus 返回空响应

java - Play Framework 为一个 html 页面渲染多个 View

Scala 枚举在 java 中的使用