web-dev-qa-db-ja.com

WildFly 8でのHTTPリクエストのダンプ

開発中にHTTPリクエストをデバッグするには、WildFly 8アプリケーションサーバーで、リクエストメソッドとヘッダーを含むHTTPリクエストをログファイルにダンプしたいserver.logで結構です。

WildFlyのHTTPサブシステムのソースで、 RequestDumpingHandler と、対応するログカテゴリio.undertow.request.dumpが見つかりました

ただし、そのヘッダーをインストールして、アプリケーション(いくつかの静的リソースとJAX-RSハンドラーを備えたWAR)によって提供されるすべての要求に適用されるようにするには、どうすればよいかわかりません。

対応するドキュメントページ( ndertow Webサブシステムの構成 )は、ハンドラーを実際に説明していません。構成セクションに<handler>要素があります

<?xml version="1.0" ?>
<server xmlns="urn:jboss:domain:2.1">
    ...
    <profile>
        ...
        <subsystem xmlns="urn:jboss:domain:undertow:1.1">
        <buffer-cache name="default"/>
        <server name="default-server">
            <http-listener name="default" socket-binding="http"/>
            <Host name="default-Host" alias="localhost">
                <location name="/" handler="welcome-content"/>
                <filter-ref name="server-header"/>
                <filter-ref name="x-powered-by-header"/>
            </Host>
        </server>
        <servlet-container name="default">
            <jsp-config/>
        </servlet-container>
        <handlers>
            <file name="welcome-content" path="${jboss.home.dir}/welcome-content"/>
            <!-- <dump-request /> ?? or something?-->
        </handlers>
        <filters>
            <response-header name="server-header" header-name="Server" header-value="WildFly/8"/>
            <response-header name="x-powered-by-header" header-name="X-Powered-By" header-value="Undertow/1"/>
        </filters>
        </subsystem>
        ...
    </profile>
    ...
</server>

しかし、私が知る限りでは、<file>とプロキシのみが予想されます(?)。

WildFlyで着信HTTPリクエストの詳細をすべてログに記録するにはどうすればよいですか? JAX-RSレイヤーにいくつかのロギングメカニズムをインストールできることはわかっていますが、両方を処理する1つのダンプメカニズムが必要ですREST API呼び出しと静的に提供されるリソース。

23

ハンドラチェーンにRequestDumpingHandlerを追加する必要があります。

Wildfly 8.1の一部として、それはまだ友好的な方法では不可能です。

これは8.2と9で改善されたので、次のようなものを追加することでこれを構成できます。

<Host name="default-Host" >
     .....
     <filter-ref name="request-dumper"/>
</Host>
....
<filters>
    ...
    <filter name="request-dumper" class-name="io.undertow.server.handlers.RequestDumpingHandler" module="io.undertow.core" />
</filters>

8.1では唯一のオプションはServletExtensionを追加することになります http://undertow.io/undertow-docs/undertow-docs-1.2.0/#servlet-extensions

これにより、このRequestDumpingHandlerが外部チェーンに追加されます。

FWIW 8.2リリースはほとんど準備ができているので、それを待つか、単に8.xブランチのソースをビルドすることができます。

CLI経由で上記の設定を追加するには、次のコマンドを使用できます。

/subsystem=undertow/configuration=filter/custom-filter=request-dumper:add(class-name="io.undertow.server.handlers.RequestDumpingHandler",  module="io.undertow.core")
/subsystem=undertow/server=default-server/Host=default-Host/filter-ref=request-dumper:add
35
Tomaz Cerar

Wildfly 9および10.1.0では、追加するだけで機能します

            <subsystem xmlns="urn:jboss:domain:undertow:3.1">
            <server name="default-server">
            <Host name="default-Host" alias="localhost">
                <access-log/>
            </Host>
            </server>
            </sub-system>
2
Karthik Murugan

ヘッダーだけでなく、HTTPボディ全体をログアウトする方法を尋ねる人がたくさんいます。

答えが存在するようです: https://8bitplatoon.blogspot.com/2017/02/dumping-http-requests-and-responses-in.html

つまり、そのリンクが存続しない場合は、standalone.xmlに単純に追加するだけでうまくいきます。

<system-properties> <property name="com.Sun.xml.ws.transport.http.HttpAdapter.dump" value="true"/> </system-properties>

これを<extensions>...</extensions>の後、<management>...</management>の前に追加し、wildflyを再起動し、サーバーログ(私の場合はserver.log)で完全なHTTP本文を取得できました。

これは、Undertowの「リクエストダンパー」と対話したり、依存したりすることはありません。

2
NAN