使用filter获取http请求的出参以及入参

发布时间:2017-6-26 3:02:49 编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"使用filter获取http请求的出参以及入参 ",主要涉及到使用filter获取http请求的出参以及入参 方面的内容,对于使用filter获取http请求的出参以及入参 感兴趣的同学可以参考一下。

首先 我们的目的是做一个拦截器 能够对http请求做profiler,能够记录本次的调用情况,这里说下如何从http请求中获取到出参的问题。

方案一:参照http://blog.csdn.net/wuhenzhangxing/article/details/53079458

 该方案中,使用了HttpServletResponseWrapper,也就是HttpServletResponse的装饰器,相当一是一个代理,当业务中对response做写入的时候,会被装饰器拦截下来做个处理,比如输出到另外的一个ByteArrayOutputSteam中。然后我们就可以获取到指定的值了。

这种方案,使用的是标准的servlet api,比较标准 但是感觉还是有个小麻烦。

方案二:既然反射的功能那么强大  那么我们能不能用反射来做呢?

上代码:

    /*获取http出参*/    private String getOutputSteamContentForTomcat7(ServletResponse response) {        try {            OutputStream outputStream = response.getOutputStream();            Object contentHolder = ReflectUtil.getFiledValue(outputStream, "ob");            //获取到buffer 然后从buffer中获取到返回值            Object result = ReflectUtil.getFiledValue(contentHolder, "outputChunk");            String resultString = result == null ? StringUtils.EMPTY : result.toString();            if (StringUtils.startsWith(resultString, "<html>")) {                //含有html文本                return "HTML-CONTENT";            }            return resultString;        } catch (Exception e) {            LoggerUtils.error(logger, e, "获取WEB返回内容异常");            return StringUtils.EMPTY;        }

该方法中 使用反射来获取,但是坏处也非常明显,由于不是使用的标准的API接口 会导致tomcat版本不同 内部的类结构不同而导致获取不到 但是实现起来比较简单。经过测试,对于tomcat6和tomcat7是兼容的 但是tomcat8非兼容

上一篇:Gson 和 Fastjson 你不知道的事
下一篇:日志插件 log4net 的使用

相关文章

相关评论

本站评论功能暂时取消,后续此功能例行通知。

一、不得利用本站危害国家安全、泄露国家秘密,不得侵犯国家社会集体的和公民的合法权益,不得利用本站制作、复制和传播不法有害信息!

二、互相尊重,对自己的言论和行为负责。