首页 > 代码库 > 使用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版本不同 内部的类结构不同而导致获取不到 但是实现起来比较简单
使用filter获取http请求的出参以及入参
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。