Дамп HTTP-запросов в WildFly 8

для отладки HTTP-запросов во время разработки Я хотел бы, чтобы мой сервер приложений WildFly 8 сбрасывал HTTP-запросы, включая метод запроса и заголовки, в файл журнала. server.log было бы нормально.

в источниках http-подсистемы WildFly я нашел RequestDumpingHandler и соответствующая категория io.undertow.request.dump

однако я не могу понять, как установить этот заголовок, чтобы он применялся ко всем запросам, обслуживаемым моим приложение (война с некоторыми статическими ресурсами и обработчиком JAX-RS).

соответствующая страница документации (конфигурация веб-подсистемы Undertow) не объясняет обработчики. Есть <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> и прокси там ожидается(?).

как я могу войти полную информацию о входящих HTTP-запросах в WildFly? Я знаю, что могу установить некоторые механизм ведения журнала на уровне JAX-RS, но я хотел бы иметь один механизм дампа, который обрабатывает как вызовы REST API, так и статически обслуживаемые ресурсы.

3 ответов


вам нужно будет добавить 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.х филиал.

чтобы добавить выше config через 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

есть несколько людей, которые спрашивают, Как получить весь HTTP-тело, а не только заголовки.

кажется, существует ответ: https://8bitplatoon.blogspot.com/2017/02/dumping-http-requests-and-responses-in.html

короче говоря, если эта ссылка не выживет, простое дополнение к вашему автономному.xml сделает трюк:

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

я добавил Это после <extensions>...</extensions> и до <management>...</management>, перезапустил wildfly и был возможность получить полные тела HTTP в моих журналах сервера (server.войдите в мой случай).

Это не взаимодействует или не зависит от подводного "запроса самосвала" вообще, насколько я могу судить, Вы можете сделать одно, другое или оба.


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