вторник, 17 марта 2015 г.

Jboss Wildfly 8 HTTP response headers

Вопрос: как сконфигурировать web-сервер в jboss 8/9 для того, чтобы подставлять в ответы важные и нужные http-заголовки?
Конкретный пример: для обеспечения кросс-доменных запросов надо бы добавлять заголовок Access-Control-Allow-Origin. Ну, и до кучи ещё пару связанных (Access-Control-Allow-Methods, Access-Control-Allow-Headers). Ясно, что это надо не в прикладном сервлете/контроллере код писать, а настраивать сам сервер. Как?
Ответ далее в статье.

Слышали что-нибудь о undertow? Можно перейти по ссылке и почитать, но сейчас важно следующее: undertow - это "гибкий высокопроизводительный web-сервер" и "undertow спонсируется jboss'ом и является дефолтным web-сервером в wildfly".

Конфигурация undertow размещается в standalone.xml и выглядит примерно так:
<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"/>
    </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>
И вот тут как раз - самое подходящее место для конфигурации.
Создаём нужные заголовки...
<response-header name="access-control-allow-origin-header" header-name="Access-Control-Allow-Origin" header-value="http://example.com"/>
<response-header name="access-control-allow-methods-header" header-name="Access-Control-Allow-Methods" header-value="GET, POST, OPTIONS"/>
<response-header name="access-control-allow-headers-header" header-name="Access-Control-Allow-Headers" header-value="Content-Type, X-SESSION"/>
... и делаем ссылки на них:
    <server name="default-server">
        ...
        <host name="default-host" alias="localhost">
            ...
            <filter-ref name="access-control-allow-origin-header"/>
            <filter-ref name="access-control-allow-methods-header"/>
            <filter-ref name="access-control-allow-headers-header"/>
        </host>
    </server>
В результате ответ будет содержать среди прочих такие заголовки:
X-Powered-By:Undertow/1
Server:WildFly/8
Access-Control-Allow-Headers:Content-Type, X-SESSION
Access-Control-Allow-Origin:
http://example.com
Access-Control-Allow-Methods:GET, POST, OPTIONS

Всё :)

Комментариев нет:

Отправить комментарий