web-dev-qa-db-fra.com

Vider les requêtes HTTP dans WildFly 8

Pour déboguer les requêtes HTTP pendant le développement, J'aimerais que mon serveur d'applications WildFly 8 vide les requêtes HTTP, y compris la méthode de requête et les en-têtes, dans un fichier journal . server.log serait bien.

Dans les sources du sous-système HTTP de WildFly, j'ai trouvé RequestDumpingHandler et la catégorie de journalisation correspondante io.undertow.request.dump

Cependant, je ne peux pas comprendre comment installer cet en-tête pour qu'il soit appliqué à toutes les demandes servies par mon application (un WAR avec des ressources statiques et un gestionnaire JAX-RS).

La page de documentation correspondante ( Configuration du sous-système Web Undertow ) n'explique pas vraiment les gestionnaires. Il y a un <handler> élément dans la section de configuration

<?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>

mais pour autant que je sache, seulement <file> et proxy y sont attendus (?).

Comment puis-je enregistrer tous les détails des requêtes HTTP entrantes dans WildFly? Je sais que je pourrais installer un mécanisme de journalisation sur la couche JAX-RS, mais je voudrais d'avoir un mécanisme de vidage qui gère à la fois les appels à l'API REST et les ressources servies statiquement).

23

Vous devez ajouter RequestDumpingHandler à votre chaîne de gestionnaires.

Dans le cadre de Wildfly 8.1, cela n'est pas encore possible de manière conviviale.

Ceci est amélioré dans 8.2 et 9 afin que vous puissiez le configurer en ajoutant quelque chose comme ceci:

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

dans 8.1, seule l'option serait maintenant d'ajouter ServletExtension http://undertow.io/undertow-docs/undertow-docs-1.2.0/#servlet-extensions

qui ajouterait ce RequestDumpingHandler à la chaîne externe.

La version FWIW 8.2 est presque prête, vous pouvez donc l'attendre ou simplement créer des sources pour la branche 8.x.

Pour ajouter la configuration ci-dessus via CLI, vous pouvez utiliser:

/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

Sur Wildfly 9 et 10.1.0, cela fonctionne simplement en ajoutant

            <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

Un certain nombre de personnes demandent comment déconnecter l'intégralité du corps HTTP, pas seulement les en-têtes.

Il semble qu'une réponse existe: https://8bitplatoon.blogspot.com/2017/02/dumping-http-requests-and-responses-in.html

En bref, si ce lien ne survit pas, un simple ajout à votre standalone.xml fera l'affaire:

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

J'ai ajouté ceci après le <extensions>...</extensions> et avant <management>...</management>, a redémarré wildfly et a pu obtenir les corps HTTP complets dans mes journaux de serveur (server.log dans mon cas).

Pour autant que je sache, cela n'interagit pas avec ou ne dépend pas du "dumper de demande" d'Undertow, vous pouvez faire l'un, l'autre ou les deux.

2
NAN