分享

配置Tomcat打印http request内容的详细信息

 hh3755 2016-09-18

最近有客户说升级了我们的产品他们SSO环境突然不工作了,他们不确定是第三方的authentication center出了问题还是我们产品的问题,事实上绝大多数的SSO实现都依赖于http header,我们的产品依赖于REMOTE_USER这个header来告诉我们已经通过授权的用户名,这里要多说一句,http header REMOTE_USER和HttpServletRequest.getRemoteUser可不一样,这个方法拿的是一个类似cgi运行环境的环境变量,例如如果IIS+Tomcat来实现windows authentication的时候,ajp3协议里会会告诉这个环境变量的值,这个时候跟http request就没什么关系了。

客户要求我们是否能够帮助dump出到达tomcat容器的http requests,来证明确实要求的http request不包含相应的内容,想了一些,这应该容器应该提供的debug功能,所以查了查文档,果然tomcat的valve架构就是完成类似事情的,而且有一个专门的valve来做这件事

<Valve className="org.apache.catalina.valves.RequestDumperValve"/>

只要在server.xml里uncomment这一行就好了。

不过这个valve不适用tomcat 7,tomcat团队在tomcat 7里面决定把类似的功能放入标准的Java Servlet Filter体系,并且内置了filter类,org.apache.catalina.filters.RequestDumperFilter,使用也很简单,只要在web.xml里按照下面的样子配置就好

<filter>
  <filter-name>requestdumper</filter-name>
  <filter-class>
    org.apache.catalina.filters.RequestDumperFilter
  </filter-class>
</filter>
<filter-mapping>
  <filter-name>requestdumper</filter-name>
  <url-pattern>*</url-pattern>
</filter-mapping>

不过可惜的是两者的功能有那么一点点的不等价,甚至tomcat 6的valve更胜一筹,有些debug scenarios里filter表现出有点奇怪的方式,具体可以看 这里

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多