编程语言
首页 > 编程语言> > java-拦截Play 2.1中的所有响应

java-拦截Play 2.1中的所有响应

作者:互联网

使用Play Framework 2.1是否可以拦截所有HTTP响应?

这是我在Global.java文件中用来拦截所有请求的内容,但是我还希望拦截响应:

import java.lang.reflect.Method;

import play.GlobalSettings;
import play.mvc.*;
import play.mvc.Http.*;
import views.html.*;

public class Global extends GlobalSettings {

    private static BasicAuthHandler AUTH;

    @SuppressWarnings("rawtypes")
    @Override
    public Action onRequest(Request request, Method actionMethod) {

        if ( ... ) {
            return new Action.Simple() {

                @Override
                public Result call(Context ctx) throws Throwable {
                    return unauthorized();
                }
            };
        }

        return super.onRequest(request, actionMethod);
    }
}

我已经阅读了manipulating the response上的文档,但仅描述了如何分别针对每个结果进行操作.

解决方法:

TransactionalAction是请求/响应拦截器的示例.它扩展了Action并提供了针对控制器类型或方法的Transactional注释.

带有操作注释的控制器方法示例:

@Transactional
public static Result ok(){
    return ok();
}

More details.

操作记录响应的示例(注意,不提供注释的操作,如Transactional,扩展Action.Simple):

public class LogAction extends Action.Simple {

    @Override
    public F.Promise<Result> call(Http.Context ctx) throws Throwable {
        F.Promise<Result> call = delegate.call(ctx);
        return call.map(r -> {
            String responseBody = new String(JavaResultExtractor.getBody(r, 0L));
            Logger.info(responseBody);
            return r;
        });
    }
}

用法,方法定义:

@With(LogAction.class)
public static Result ok(){
    return ok();
}

用法,类定义-截获的所有方法:

@With(LogAction.class)
public class BaseController extends Controller {

    ....

}

如果您不喜欢@With注释,则可以向前走一步.自己定义自定义注释:

@With({ LogAction.class })
@Target({ ElementType.TYPE, ElementType.METHOD })
@Retention(RetentionPolicy.RUNTIME)
public @interface Log {
}

并以这种方式使用它:

@Log
public static Result ok(){
    return ok();
}

如果您的自定义批注接受参数,请按以下方式更改LogAction定义:

public class LogAction extends Action<Log> {
    // use configuration object to access your custom annotation configuration
}

标签:playframework,httpresponse,playframework-2-1,java
来源: https://codeday.me/bug/20191121/2049761.html