アプリ開発ときどきアウトドア

主にJavaを使ったアプリ開発やトラブルシューティング等のノウハウ、キャンプや登山の紹介や体験談など。

1. システムエンジニアリング eap/wildfly トラブルシューティング 基盤技術

Wildflyでリクエストをダンプする

投稿日:

Webアプリのデバッグや障害対応等で、Webアプリに対するリクエストやレスポンスのHTTPヘッダや内容を確認したい場合がある。
次のような場面ではクライアント側での確認ができないため、今回のようにAPサーバ側でキャプチャを行う。

  • ブラウザからのアクセスを想定したWebアプリの場合、ブラウザの開発ツール(F12)で通信内容をキャプチャできるが、REST API等のブラウザを介さないようなWebアプリへのアクセスについては、別の方法が必要である。
  • Windowsの場合はnetshやWireshark、Linuxの場合はtcpdump等のツールを利用できるが、開発環境のようにWebサーバがローカルにある場合はループバックアダプタの通信内容をキャプチャする必要があるが、これは一般的に難しい。
  • SSL/TLSが使用されている場合は、暗号化を解除するためにキャプチャツールに秘密鍵を設定する必要があり難易度が高い。
  • 本番や検証環境の場合、APサーバのフロントにロードバランサやリバースプロキシが配置されてる多段構成になることが多い。ブラウザとロードバランサやリバースプロキシとの通信は、ブラウザの開発ツールでは確認できるが、ロードバランサやリバースプロキシとAPサーバ間の通信はキャプチャできない。

RequestDumper

Wildfly(undertow)には既定で、リクエストとレスポンスをダンプする機能が含まれている。
次のように設定を追加して、Wildflyを再起動すれば利用可能である。
※下記はWildfly13の例

...
        <subsystem xmlns="urn:jboss:domain:undertow:6.0" default-server="default-server" default-virtual-host="default-host" default-servlet-container="default" default-security-domain="other">
            <buffer-cache name="default"/>
            <server name="default-server">
...
                <host name="default-host" alias="localhost">
...
                    <filter-ref name="request-dumper"/>
...
                </host>
            </server>
...
            <filters>
                <filter name="request-dumper" module="io.undertow.core"
                  class-name="io.undertow.server.handlers.RequestDumpingHandler"/>
            </filters>
...
        </subsystem>

ダンプの例

Webアプリにアクセスすると、次のようにリクエストとレスポンスのヘッダがログに出力されます。

20:48:06,415 INFO  [io.undertow.request.dump] (default task-1) 
----------------------------REQUEST---------------------------
               URI=/xxx/xxx.xhtml
 characterEncoding=null
     contentLength=-1
       contentType=null
            cookie=_ga=GA1.1.xxx.xxx
            header=Connection=keep-alive
            header=Accept=text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3
            header=Accept-Language=ja,en-US;q=0.9,en;q=0.8
            header=Accept-Encoding=gzip, deflate, br
            header=Cookie=_ga=GA1.1.xxx.xxx
            header=User-Agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36
            header=Upgrade-Insecure-Requests=1
            header=Host=xxx:1234
            locale=[ja, en_US, en]
            method=GET
          protocol=HTTP/1.1
       queryString=
        remoteAddr=/xxx:9876
        remoteHost=host1
            scheme=http
              host=xxx:1234
        serverPort=8080
          isSecure=false
--------------------------RESPONSE--------------------------
     contentLength=8244
       contentType=text/html;charset=UTF-8
            cookie=JSESSIONID=xxxxxx; domain=null; path=/xxx
            header=Connection=keep-alive
            header=Set-Cookie=JSESSIONID=xxxxxx; path=/xxx
            header=Content-Type=text/html;charset=UTF-8
            header=Content-Length=8244
            header=Date=Wed, 29 May 2019 11:48:06 GMT
            status=200

==============================================================


(adsbygoogle = window.adsbygoogle || []).push({});


(adsbygoogle = window.adsbygoogle || []).push({});

-1. システムエンジニアリング, eap/wildfly, トラブルシューティング, 基盤技術

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

Javaでのパスワード付きzipファイルの圧縮/解凍方法(ZipCrypto/AES)

先日、JavaでのZIP暗号化の考察という記事を書きましたが、zip4jのメンテナンスが再開されており、バージョン2系が公開されていましたので、これを使って通常のzip圧縮/解凍、パスワード付きzip …

初心者向けの最低限のviの使い方

新入社員やUnix/Linux未経験がviで苦戦するのをよく見ます。 ネットではコマンドの説明を主とした内容が多く、このような資料を見てviを使うと、モードの違いが分からず、思ったように編集できないこ …

WebサイトのSSL化

次のようなGoogleウェブマスター向け公式ブログでの推奨や、リモートか管理の安全性向上の向上のためにSSL(TLS)を有効にする。 概要 Googleさんの考え 保護されたウェブの普及を目指して(2 …

JavaEE7のJSF, Facelets, JSPの関係

JavaEEを使ったアプリ開発の際に、いつも気になるが後回しにしていたこと… HTML5への対応方法の調査等、今後の理解促進のために、調べてみた。 FaceletsとJSFとの関係は? J …

区分データ生成ツール

区分定義書の変更時、定数や列挙体、マスタの一部を手動で修正するような運用だと、抜け漏れや間違いが発生する場合があります。この辺の手間や間違いを低減するために、区分定義書から自動的に成果物を作成するEx …

プロフィール ゆっきーです。
都内でシステムエンジニアをやっています。
もっと詳細を見る