4.5.5. 迁移 Global Valves


JBoss EAP 支持的早期版本.valves 是插入到应用的请求处理管道中的自定义类,在 servlet 过滤器之前插入,以更改请求或执行其他处理。

  • 全局 valves 会被插入到所有部署的应用的请求处理管道中,并在服务器配置文件中配置。
  • 身份验证器 valves 验证请求的凭据。
  • 通过扩展 org.apache.catalina.valves.ValveBase 类并配置在 jboss-web.xml 描述符文件的 <valve> 元素 中创建自定义应用程序 valves。这些 valve 必须手动迁移。

本节论述了如何迁移全局 valves。本指南的"迁移自定义应用程序 Valves"一节介绍了自定义和验证器的迁移

Undertow(在 JBoss EAP 7 中取代 JBoss Web)不支持全局 valves;但是,您应该能够通过使用 Undertow 处理程序来实现类似的功能。Undertow 包含多个提供常见功能的内置处理程序:它还提供创建自定义处理程序的功能,可用于取代自定义 valve 功能。

如果您的应用使用 valves,则必须将它们替换为适当的 Undertow 处理程序代码,以便在迁移到 JBoss EAP 7 时获得相同的功能。

如需有关如何配置处理程序的更多信息,请参阅 JBoss EAP 7 配置指南中的配置处理程序

如需有关如何配置过滤器的更多信息,请参阅 JBoss EAP 7 配置指南中的配置过滤器

迁移 JBoss Web Valves

下表列出了 JBoss EAP 之前版本中 JBoss Web 提供的 valves,以及对应的 Undertow 内置处理程序:JBoss Web valves 位于 org.apache.catalina.valves 包中

Expand
表 4.2. 将 Valves 映射到处理程序
valve处理程序

AccessLogValve

io.undertow.server.handlers.accesslog.AccessLogHandler

CrawlerSessionManagerValve

io.undertow.servlet.handlers.CrawlerSessionManagerHandler

ExtendedAccessLogValve

io.undertow.server.handlers.accesslog.AccessLogHandler

JDBCAccessLogValve

相关说明请查看 下面的JDBCAccessLogValve 手动迁移 过程。

RemoteAddrValve

io.undertow.server.handlers.IPAddressAccessControlHandler

RemoteHostValve

io.undertow.server.handlers.AccessControlListHandler

RemoteIpValve

io.undertow.server.handlers.ProxyPeerAddressHandler

RequestDumperValve

io.undertow.server.handlers.RequestDumpingHandler

RewriteValve

有关手动迁移这些 valve 的说明,请参阅迁移 JBoss Web 重写条件

StuckThreadDetectionValve

io.undertow.server.handlers.StuckThreadDetectionHandler

您可以使用管理 CLI 迁移 操作自动迁移满足以下条件的全局 valves:

  • 它们仅限于上表中列出的 valve,不需要手动处理。
  • 它们必须在服务器配置文件的 Web 子系统中定义。

如需有关管理 CLI 迁移 操作的更多信息,请参阅 管理 CLI 迁移操作

JDBCAccessLogValve Manual Migration Procedure

org.apache.catalina.valves.JDBCAccessLogValve valve 是规则的例外,无法自动迁移到 io.undertow.server.handlers.JDBCLogHandler。按照以下步骤迁移以下示例 valve。

<valve name="jdbc" module="org.jboss.as.web" class-name="org.apache.catalina.valves.JDBCAccessLogValve">
    <param param-name="driverName" param-value="com.mysql.jdbc.Driver" />
    <param param-name="connectionName" param-value="root" />
    <param param-name="connectionPassword" param-value="password" />
    <param param-name="connectionURL" param-value="jdbc:mysql://localhost:3306/wildfly?zeroDateTimeBehavior=convertToNull" />
    <param param-name="format" param-value="combined" />
</valve>
Copy to Clipboard Toggle word wrap
  1. 为数据库创建一个驱动程序模块,它将存储日志条目。
  2. 配置数据库的数据源,并将驱动程序添加到 datasources 子系统中可用驱动程序的列表中。

    <datasources>
        <datasource jndi-name="java:jboss/datasources/accessLogDS" pool-name="accessLogDS" enabled="true" use-java-context="true">
            <connection-url>jdbc:mysql://localhost:3306/wildfly?zeroDateTimeBehavior=convertToNull</connection-url>
            <driver>mysql</driver>
            <security>
               <user-name>root</user-name>
               <password>Password1!</password>
            </security>
        </datasource>
        ...
        <drivers>
            <driver name="mysql" module="com.mysql">
                <driver-class>com.mysql.jdbc.Driver</driver-class>
            </driver>
        ...
        </drivers>
    </datasources>
    Copy to Clipboard Toggle word wrap
  3. undertow 子系统中,使用以下表达式配置 expression-filterjdbc-access-log(datasource=DATASOURCE_JNDI_NAME)。

    <filters>
        <expression-filter name="jdbc-access" expression="jdbc-access-log(datasource='java:jboss/datasources/accessLogDS')" />
        ...
    </filters>
    Copy to Clipboard Toggle word wrap
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat