我试图将一些日志记录捕获到我的应用程序的原始http请求.我的Java代码在SpringMVC控制器中.我可以访问"HttpServletRequest"对象.但我找不到从中获取原始http请求流的方法.有一个读者,但只阅读帖子内容.我想要的是整个shebang,url,标题,身体.是否有捷径可寻?
提前致谢.
没有.
servlet没有提供这样的API,并且很难实现,因为(基本上)你不能从Socket中读取两次相同的数据.获取头信息并不困难,但是在servlet容器中无法捕获原始头.当您的应用程序读取/写入相关流时,您需要自己捕获它们.
您的替代方案是:
编写自己的HTTP协议的服务器端实现.(可能不适合您的申请.)
您可以使用过滤器获取所需的标题信息,但它们不会显示原始请求.
一些servlet容器有请求头记录; 例如,对于Tomcat,有一个名为RequestDumperValve的野兽可以在"server.xml"文件中配置.
实现位于客户端和"真实"服务器之间的代理服务器.
数据包嗅探.
哪个最好取决于你真正想要实现的目标.
跟进:
如果标题中存在"badness",则RequestDumperValve方法可能是调试的最佳方法.转到"$ CATALINA_HOME/conf/server.xml"文件,搜索"RequestDumperValve"并取消注释该元素.然后重启Tomcat.您也可以在webapp的"context.xml"文件中执行等效操作.转储的请求和响应默认以"logs/catalina.out"结尾.请注意,这将提供大量输出,因此您不希望在生产中执行此操作...除非作为最后的手段.
如果错误在POST或PUT请求的内容中,则您需要修改应用程序以在内容从输入流中读取内容时保存副本.我不知道有任何捷径.
此外,如果您想长时间保持登录,您可能需要通过调用HttpServletRequest API和日志标头等来自己解决问题.RequestDumperValve生成太多输出,并转储所有请求而不仅仅是坏请求.
| 归档时间: |
|
| 查看次数: |
9399 次 |
| 最近记录: |