spring 升级记录

前序

我使用的了spring 6.1.6,使用框架是springboot + mybatis,然后被扫出了下面两个漏洞:

(1)Spring Web UriComponentsBuilder URL解析不当漏洞(CVE-2024-22243)

(2)Spring Framework 特定条件下目录遍历漏洞(CVE-2024-38819)

解决方案就是升级spring,下面记录一下升级过程

一、打开你项目的根 pom.xml

1、找到 配置项中的 spring-boot-starter-parent 版本。

选择一个已修复漏洞的 Spring Boot 版本。为确保兼容性,建议使用最新的稳定版本。根据漏洞修复信息,Spring Boot 3.3.x 系列通常对应修复后的 Spring Framework 6.1.x 版本。

例如,将 spring-boot-starter-parent 的版本升级到 3.3.4 或更高版本。

修改后,在项目根目录执行 mvn clean install,Maven 会自动引入对应版本的 Spring Framework,问题即可解决。

这里我的版本有3.2.5升级到3.3.4了,如下:

bash 复制代码
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
<!--        <version>3.2.5</version> -->
        <version>3.3.4</version>
    </parent>

2、 升级后,运行时报错:

升级 Spring Boot 到 3.3.4 后出现 NoClassDefFoundError: org/springframework/boot/web/servlet/support/SpringBootServletInitializer,主要一种可能原因,就是jdk版本低了

Spring Boot 3.x 要求 Java 17 或更高版本。

如果你的 pom.xml 中仍配置为 Java 1.8,请改成17或者21

bash 复制代码
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <configuration>
        <source>1.8</source>
        <target>1.8</target>
    </configuration>
</plugin>

改成

bash 复制代码
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <configuration>
        <source>17</source>
        <target>17</target>
        <encoding>UTF-8</encoding>
    </configuration>
</plugin>

3 logback-spring.xml 报错

bash 复制代码
Logging system failed to initialize using configuration from 'null'
java.lang.IllegalStateException: Logback configuration error detected: 
ERROR in ch.qos.logback.core.model.processor.ImplicitModelHandler - Could not create component [timeBasedFileNamingAndTriggeringPolicy] of type [ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP] java.lang.ClassNotFoundException: ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP

解决方案:

你需要修改项目的 Logback 配置文件(通常是 src/main/resources 目录下的 logback-spring.xml 或 logback.xml),将旧的配置替换为新的方式。

步骤一:修改滚动策略配置

你需要找到配置文件中的 部分,并按照下面的示例进行替换。

需要修改的旧配置示例:

bash 复制代码
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
    <fileNamePattern>${LOG_HOME}/%d{yyyy-MM-dd}.%i.log</fileNamePattern>
    <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
        <maxFileSize>10MB</maxFileSize>
    </timeBasedFileNamingAndTriggeringPolicy>
    <maxHistory>30</maxHistory>
</rollingPolicy>

替换为的新配置示例:

bash 复制代码
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
    <fileNamePattern>${LOG_HOME}/%d{yyyy-MM-dd}.%i.log</fileNamePattern>
    <maxFileSize>10MB</maxFileSize>
    <maxHistory>30</maxHistory>
    <totalSizeCap>3GB</totalSizeCap>
</rollingPolicy>

修改说明:

将 rollingPolicy 的 class 属性改为 ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy。

移除整个 标签及其内容。

将原来在 triggeringPolicy 中的 标签,直接放在 标签内。

(可选)可以添加 来限制所有日志文件的总大小,防止磁盘被写满。

相关推荐
lulu12165440783 分钟前
大模型API聚合平台技术架构深度对比:六大平台协议转换、路由调度与安全治理全解析 - 微元算力(weytoken)
java·人工智能·安全·架构·ai编程
可乐ea5 分钟前
【Spring Boot + MyBatis|第4篇】MyBatis 动态 SQL:if、where、foreach 使用详解
java·spring boot·后端·sql·mybatis
記億揺晃着的那天12 分钟前
Windows 通过 Java 获取可用端口的一个坑:Hyper-V 保留端口导致 UDP 绑定失败
java·windows·udp
组合缺一13 分钟前
SolonCode(编码智能体)支持鸿蒙 PC
java·华为·ai·ai编程·harmonyos·solon·soloncode
小bo波15 分钟前
用匿名内部类优雅地计算方法执行时间
java·设计模式·性能测试·模板方法模式·lambda·代码优化·匿名内部类
拾光师19 分钟前
Java AIO 详解:异步非阻塞 IO 的实现与实践
后端
折哥的程序人生 · 物流技术专研19 分钟前
Tomcat 严重警告:JDBC 驱动未注销 + 工作线程泄漏 —— 原因、影响与彻底修复(生产级终极指南)
java·运维·数据库·mysql·oracle·tomcat
一个儒雅随和的男子22 分钟前
sentinel底层原理剖析以及实战优化
java·网络·sentinel
伊灵eLing28 分钟前
GoLang 语言基础
开发语言·后端·golang
两年半的个人练习生^_^28 分钟前
JMM 进阶:彻底理解 synchronized 实现原理
java·开发语言