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

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

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

関連記事

PCを起動するとLANケーブルが未接続状態になる

事象 Windows10にアップグレードして、何度かPCを起動したときに、LANケーブルが接続されていない旨のエラーが表示される。アップグレード前のWindows7では特に問題なかった。 正常に接続で …

開発環境のJBoss EAP7にリモートアクセス

開発中のものを他者に見せたり、問題が発生している開発者の開発物を参照するために、eclipse上で起動しているEAP7のWebアプリに別のPCからアクセスしたい場合があります。 このための手順を記載し …

DB操作フレームワーク はJPA or mybatis?

開発に向けた準備で、開発標準を準備するフレームワーク(FW)チーム、それらを使って実装を行う業務チームが集まって、「DB操作を行うためのFWは何を使うか?」という協議になった。 FWチームは、FW・J …

grid

Excelで月初日、第1週日、第2週日を算出する

プロジェクト管理で毎年、毎月のタスクを管理するために、この辺の操作を行うためのExcel関数を調べたので記載しておきます。 Excelの関数式 ここでは、基本的に5営業日単位で管理したいことと、最初の …

WindowsにApacheを構築

アプリケーション開発環境として主にWindowsを使っています。 開発時の検証で使用するミドルウェアがApacheを使用することが多いので、ここでは開発環境であるWindowsにApacheを構築する …

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