我想创建一个注释,该注释将在某些 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/