Как переписать RewriteValve для Undertow / JBoss 7.2 EAP? - PullRequest
1 голос
/ 14 июля 2020

Я перехожу с JBoss 6.4.3 на JBoss 7.2 и во время развертывания увидел предупреждение Valves are no longer supported. Это произошло из файла jboss-web.xml с:

<valve>
    <class-name>org.jboss.web.rewrite.RewriteValve</class-name>
</valve>

... и соответствующего файла rewrite.properties:

RewriteCond %{HTTP:X-Forwarded-Proto} http
RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [R,L]

Может ли кто-нибудь посоветовать, как это переписать (каламбур не предназначен ) для Undertow?

1 Ответ

1 голос
/ 22 июля 2020

Вы можете создать rewrite фильтр в подсистеме Undertow, а затем ссылаться на него на хосте сервера в файле конфигурации ( автономный. xml или домен. xml - в зависимости от режима, в котором вы запускаете сервер приложений).

Я могу придумать два варианта, которые могут вам помочь:

  1. Использование JBoss Application Server Client (должно быть помещено в path/to/jboss-7.2/bin/)

    • Создание фильтра перезаписи с пользовательским именем redirect-http-to-https:
    ./jboss-cli.sh --connect --command="/subsystem=undertow/configuration=filter/rewrite=redirect-http-to-https:add(redirect=\"true\",target=\"https://%{LOCAL_SERVER_NAME}%{REQUEST_URL}\")"
    
    • Использование / ссылка на фильтр redirect-http-to-https:
    ./jboss-cli.sh --connect --command="/subsystem=undertow/server=default-server/host=default-host/filter-ref=redirect-http-to-https:add(predicate=\"equals(%p,80)\")"
    
  2. Редактирование соответствующего файла конфигурации вручную (например, standalone.xml)

<subsystem xmlns="urn:jboss:domain:undertow:11.0" default-server="default-server" [...]>
            <buffer-cache name="default"/>
    <server name="default-server">
        [...]
        <host name="default-host" alias="localhost">
            <filter-ref name="redirect-http-to-https" predicate="equals(%p,80)"/>
        </host>
    </server>
    [...]
    <filters>
        <rewrite name="redirect-http-to-https" target="https://%{LOCAL_SERVER_NAME}%{REQUEST_URL}" redirect="true"/>
    </filters>
</subsystem>

Примечание: для атрибутов обмена Undertow (например, LOCAL_SERVER_NAME) обратитесь к документации Undertow . Кроме того, часть predicate=\"equals(%p,80)\" в filter-ref проверяет запрошенный порт (%p -> просто еще один атрибут обмена Undertow) и, если он равен 80, запускает наш фильтр перенаправления redirect-http-to-https - вы можете изменить порт 80 в соответствии с вашими потребностями.

...