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

主に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

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

関連記事

ASP.NET Core: IHttpClientFactoryの単純サンプル

IHttpClientの使い方やサンプルの記事を書きましたが、後から見るとちょっと量が多いと感じました。 とりあえず動かしてみたい、概略を知りたい、急いでいる等の人向けに、もっと単純なサンプルを用意し …

ftp, ftps, sftpの違い

開発対象システムの連携先システムとして、ftpsやらftpsサーバが指定される場合がある。 私の場合、開発標準の役割を担う場合が多く、これらの仕様を把握し、動作確認や単体テスト用のダミーのサーバを用意 …

ASP.NET Core: 変更ページを実行環境に反映

ASP.Net Core(3.0)の開発で、ページ(cshtml)を編集しながらページデザインを確認したい。 既定ではページを変更しても実行環境に反映れずサーバの再起動が必要となり開発効率が悪い。 サ …

Java正規表現によるパラメータ置換

mybatis-generatorが生成するクエリカスタマイズのために、生成されたクエリ上のパラメータを置換する方法を調べたので記載しておきます。 サンプルプログラム Java言語の場合、標準ライブラ …

区分データ生成ツール

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