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

Spring Boot集成Spring Security抛出NoSuchMethodError异常排查

根因分析
  • 该报错和你自定义的UUIDAuthenticationFilter鉴权逻辑、Spring Security配置无直接关联,核心是WildFly服务器类加载机制导致的Jackson依赖版本冲突。
  • Spring Boot 2.6.4官方管理的Jackson全家桶版本为2.13.x,报错中提到的_createContentReference(Ljava/lang/Object;)Lcom/fasterxml/jackson/core/io/ContentReference;方法是Jackson 2.13版本在jackson-core模块中新增的方法,jackson-dataformat-xml 2.13版本会调用该方法。
  • WildFly作为Java EE应用服务器,自身modules目录内置了固定版本的Jackson依赖(WildFly 25及更早版本内置Jackson版本多为2.12.x及更低),默认类加载优先级下,服务器内置模块的类会优先于应用WAR包中WEB-INF/lib下的类被加载。最终实际运行时加载了低版本的jackson-core、高版本的jackson-dataformat-xml,方法签名不匹配抛出NoSuchMethodError。
  • 错误触发点落在chain.doFilter(request, response)行,是因为该方法会把请求向后传递到Spring MVC的消息转换层,此时才会初始化XML序列化组件、加载XmlFactory类,和过滤器本身的代码逻辑无关。
  • 你之前查到的旧方案不匹配,是因为多数旧方案针对的是Maven传递依赖导致的版本冲突,没有覆盖WildFly类加载优先级高于应用私有依赖的场景,单纯调整pom.xml中的依赖配置无法解决服务器内置模块的版本覆盖问题。
修复方案

方案1:通过WildFly部署配置排除内置Jackson依赖(推荐)

该方案不需要调整现有Spring Boot对齐的依赖版本,兼容性最好。
在项目src/main/webapp/WEB-INF/路径下新建jboss-deployment-structure.xml配置文件,显式告诉WildFly部署当前应用时不要加载内置的Jackson模块,优先使用应用WAR包内自带的Jackson版本:

<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure>
    <deployment>
        <exclusions>
            <!-- 排除所有WildFly内置的Jackson相关模块 -->
            <module name="com.fasterxml.jackson.core.jackson-core"/>
            <module name="com.fasterxml.jackson.core.jackson-databind"/>
            <module name="com.fasterxml.jackson.core.jackson-annotations"/>
            <module name="com.fasterxml.jackson.dataformat.jackson-dataformat-xml"/>
            <module name="com.fasterxml.jackson.datatype.jackson-datatype-jsr310"/>
            <module name="com.fasterxml.jackson.datatype.jackson-datatype-jdk8"/>
        </exclusions>
    </deployment>
</jboss-deployment-structure>

配置完成后重新执行Maven打包,将新的WAR包部署到WildFly即可。

方案2:对齐Jackson版本到WildFly内置版本(备选,存在兼容性风险)

如果不想修改WildFly的类加载配置,可以在项目pom.xml中通过属性全局指定Jackson版本,和你使用的WildFly内置版本完全对齐。

注意:你需要先确认当前WildFly版本内置的Jackson具体版本,可进入WildFly安装目录下modules/com/fasterxml/jackson/core/jackson-core/main路径,查看jar包文件名上的版本号。

<properties>
    <!-- 替换为实际查询到的WildFly内置Jackson版本 -->
    <jackson.version>2.12.6</jackson.version>
</properties>

该方案需要额外验证Spring Boot 2.6.4和低版本Jackson的兼容性,可能会出现其他序列化相关的异常,非必要不推荐使用。

验证方式

部署完成后调用业务接口,不再抛出该NoSuchMethodError即为修复生效,也可以在应用启动时添加日志打印com.fasterxml.jackson.core.VersionUtil类的版本信息,确认实际加载的Jackson版本和预期一致。


内容的提问来源于stack exchange,提问作者Shrawan Kelwa

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 08:54:20