Дамп 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>