• 使用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非兼容

  • 相关阅读:
    Linux程序的执行
    Linux图形操作与命令行
    Linux网络配置
    Zip文件中文乱码问题解决方法(MAC->Windows)
    我只是一直很努力
    Android抓包方法(三)之Win7笔记本Wifi热点+WireShark工具
    Android抓包方法(二)之Tcpdump命令+Wireshark
    Android抓包方法(一)之Fiddler代理
    Android反编译(二)之反编译XML资源文件
    Android反编译(一)之反编译JAVA源码
  • 原文地址:https://www.cnblogs.com/color-my-life/p/6115475.html
Copyright © 2020-2023  润新知