Translated message

A translation of this page exists in English.

Warning message

This translation is outdated. For the most up-to-date information, please refer to the English version.

JBoss で HTTP リクエストとレスポンスをログに記録する方法

Solution Verified - Updated -

Environment

  • JBoss Enterprise Application Platform (EAP) 4.x
  • JBoss Enterprise Application Platform (EAP) 5.x
  • JBoss Enterprise Application Platform (EAP) 6.x

Issue

  • servlet コンテナが表示する http リクエストヘッダーのログを記録するように JBoss を設定する方法は?
  • JBoss でリクエストとレスポンスの詳細を表示する方法は?
  • RequestDumperValve を有効にしたときの副作用は?

Resolution

リクエスト全体とヘッダーを表示するには、$JBOSS_HOME/server/$PROFILE/deploy/$JBOSSWEB/server.xml の RequestDumperValve のコメント化を解除してください。ただし、RequestDumperValve はプロダクション環境での使用は考慮されていないため、プロダクション環境ではテストを行わないでください。

JBoss EAP6 では、WEB-INF\jboss-web.xml ファイルで、各デプロイメントに対して RequestDumperValve を有効にすることができます。

<jboss-web>
  <valve>
    <class-name>org.apache.catalina.valves.RequestDumperValve</class-name>
  </valve>
</jboss-web>

または wireshark を使用することもできます。ただし、wireshark を使用すると解析が複雑になります。

副次的影響

servlet が解析するペイロードを含む HTTP POST をクライアントが実行する場合は、ContentType ヘッダーを x-www-form-urlencoded 以外 (application/soap+xml など) に明示的に設定する必要があります。ContentType ヘッダーを設定しないと x-www-form-urlencoded が使用されます。デフォルト値を使用しても、明示的に x-www-form-urlencoded を設定しても RequestDumperValve が ServletRequest.getParameter() を呼び出した際に、コンテナは InputStream 内の x-www-form-urlencoded の値をパースします。したがって、servlet が InputStream にアクセスできるようになる前に InputStream はなくなります。javadoc に記載された警告については [1] を参照してください。

参照

[0] http://www.wireshark.org/

[1] http://docs.oracle.com/javaee/6/api/javax/servlet/ServletRequest.html#getParameter%28java.lang.String%29

This solution is part of Red Hat’s fast-track publication program, providing a huge library of solutions that Red Hat engineers have created while supporting our customers. To give you the knowledge you need the instant it becomes available, these articles may be presented in a raw and unedited form.

Comments