You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jboss 7.4部署War包失败报Filter未实现javax.servlet.Filter错误如何解决

JBoss 6.4 迁移至 7.4 Filter/Servlet 部署报错解决方案

报错现象

将未修改的JBoss 6.4环境下的WAR包直接部署到JBoss 7.4时,web.xml中配置的所有Filter、Servlet类都会触发如下报错:

Caused by: java.lang.IllegalArgumentException: UT010011: Filter log4jServletFilter of type class org.apache.logging.log4j.web.Log4jServletFilter does not implement javax.servlet.Filter
at io.undertow.servlet.api.FilterInfo.<init>(FilterInfo.java:74)
at org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService.createServletConfig(UndertowDeploymentInfoService.java:801)
at org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService.start(UndertowDeploymentInfoService.java:276)
at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1739)
at org.jboss.msc.service.ServiceControllerImpl$StartTask.execute(ServiceControllerImpl.java:1701)
... 6 more

若在jboss-deployment-structure.xml中添加如下配置排除undertow子系统,WAR包虽然可以无报错部署、控制台显示状态为活跃,但所有Web路径均无法访问:

<exclude-subsystems>
        <subsystem name="undertow" />
    </exclude-subsystems>

问题根因

  1. JBoss 7.4默认使用Servlet API 4.0+,而WAR包中自带的旧版本log4j-web、Servlet API依赖和容器提供的API出现类加载冲突:容器提供的javax.servlet.Filter接口和WAR包内自带的同名接口被不同类加载器加载,JVM会判定二者不匹配,因此报出Filter未实现接口的错误。
  2. undertow是JBoss 7系列的Web容器核心组件,排除该子系统后Web服务不会启动,自然无法处理任何Web请求,所以之前的规避操作是无效的。

修复方案

  • 清理WAR包内冗余的Servlet API依赖
    检查项目构建配置,将servlet-api、jsp-api这类容器会统一提供的依赖的scope设置为provided,禁止打包进WAR包的WEB-INF/lib目录下。Maven项目配置示例:
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>4.0.1</version>
        <scope>provided</scope>
    </dependency>
    
  • 升级兼容版本的日志依赖
    报错中提到的Log4jServletFilter来自旧版本的log4j-web组件,需将log4j2版本升级到2.17.1及以上,该版本已经兼容Servlet 4.0 API。
  • 调整类加载优先级配置
    在WEB-INF下新增/修改jboss-deployment-structure.xml,添加如下配置,优先加载JBoss容器提供的javax.servlet相关类,避免类冲突,同时删除之前的undertow子系统排除配置:
    <?xml version="1.0" encoding="UTF-8"?>
    <jboss-deployment-structure>
        <deployment>
            <exclusions>
                <module name="javax.servlet.api" />
            </exclusions>
            <dependencies>
                <module name="javax.servlet.api" export="true" />
            </dependencies>
        </deployment>
    </jboss-deployment-structure>
    
  • 重新打包部署
    清理旧构建产物,重新打包WAR包后部署即可正常启动,Web路径也可以正常访问。

内容的提问来源于stack exchange,提问作者Lalit Kale

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 05:27:01