Дамп HTTP-запросов в WildFly 8
Чтобы отлаживать HTTP-запросы во время разработки, , я бы хотел, чтобы мой сервер приложений WildFly 8 удалял HTTP-запросы, включая метод запроса и заголовки, в файл журнала. server.log
будет в порядке.
В источниках подсистемы HTTP WildFly я нашел RequestDumpingHandler и соответствующую категорию каротажа io.undertow.request.dump
Однако я не могу понять, как установить этот заголовок, чтобы он применялся для всех запросов, обслуживаемых моим приложением (WAR с некоторыми статическими ресурсами и обработчиком JAX-RS).
Соответствующая страница документации (Undertow configuration web subsystem configuration) на самом деле не объясняет обработчики. Элемент <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 и статически обслуживаемые ресурсы.
Ответы
Ответ 1
Вам нужно добавить 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
Ответ 2
Есть несколько человек, которые спрашивают, как вывести весь 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 и смог получить полные HTTP-объекты в своих журналах сервера (server.log в моем случае).
Это никак не влияет на "дампер запроса" Undertow или зависит от него, насколько я могу судить, вы можете сделать одно, другое или и то, и другое.