如何为 Undertow / JBoss 7.2 EAP 重写 RewriteValve?
How to rewrite a RewriteValve for Undertow / JBoss 7.2 EAP?
我正在从 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 重写这个(没有双关语)?
您可以在Undertow子系统中创建一个rewrite
filter,然后在配置文件中的服务器主机中引用它(standalone.xml或domain.xml - 取决于您启动应用程序服务器的模式。
我能想到两个可能对你有帮助的选项:
使用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}\")"
- Using/referencing 过滤器
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)\")"
手动编辑相应的配置文件(例如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 documentation。此外,filter-ref
中的 predicate=\"equals(%p,80)\"
部分检查请求的端口(%p
-> 只是另一个 Undertow 交换属性),如果它等于 80
,那么它会触发我们的重定向过滤器 redirect-http-to-https
- 您可以根据需要更改端口 80
。
我正在从 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 重写这个(没有双关语)?
您可以在Undertow子系统中创建一个rewrite
filter,然后在配置文件中的服务器主机中引用它(standalone.xml或domain.xml - 取决于您启动应用程序服务器的模式。
我能想到两个可能对你有帮助的选项:
使用
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}\")"
- Using/referencing 过滤器
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)\")"
- 正在使用自定义名称创建重写过滤器
手动编辑相应的配置文件(例如
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 documentation。此外,filter-ref
中的 predicate=\"equals(%p,80)\"
部分检查请求的端口(%p
-> 只是另一个 Undertow 交换属性),如果它等于 80
,那么它会触发我们的重定向过滤器 redirect-http-to-https
- 您可以根据需要更改端口 80
。