springboot2.6.15升级至3.3.4,Spring Framework升级至6.1.14
由于CVE-2024-38816漏洞,紧急升级spring boot版本至3.3.4
springboot2.x的用户请注意:
升级版本
目前该漏洞已经修复,受影响用户可升级到以下版本:
Spring Framework 5.3.x:升级到5.3.41(仅限企业支持)
Spring Framework 6.0.x:升级到6.0.25(仅限企业支持)
Spring Framework 6.1.x:升级到6.1.14或更高版本
安全版本Spring Framework 5.3.41为企业版,未免费开放使用!
因此,springboot2.x的用户只能升级到springboot3.x最新版本。
安全版本6.0.24 和 6.1.13 是springboot3.x使用的版本,springboot3.x的用户只需要将springboot升级到最新版本即可,官方已发布最新版本,如下图所示,springboot3.2以下版本已不再提供更新维护。
升级笔记:
引用1
springboot2.x升级到3.x实战经验总结_springboot2升级到3要做什么处理?-CSDN博客
1. 升级java版本至:21
java原来版本为8,需要升级java17以上版本,才能支持spring boot3的版本
简单查询了一下资料,索性直接升级版本至21
查询内容:
深度解读 JDK 8、JDK 11、JDK 17 和 JDK 21 的区别-CSDN博客
https://timefold.ai/blog/java-21-performance
升级过程参照引用1
2. 升级springboot 版本和依赖包
升级mysql驱动包引用:mysql-connector-j 参照引用1
升级java版本后,升级springboot3的最新稳定版本:3.3.4,升级后发现springframework的版本是6.1.3版本,不符合上面漏洞修复的版。需要手动指定spring的版本为:6.1.14版本在pom配置中添加
<properties>
<java.version>21</java.version>
<spring.version>6.1.14</spring.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jcl</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-expression</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-messaging</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- 其他依赖包 -->
<dependencies>
如果引用了httpclient,版本需要指定为5以上的版本RestTemplate引用了httpclient5
<dependency>
<groupId>org.apache.httpcomponents.client5</groupId>
<artifactId>httpclient5</artifactId>
</dependency>
全文替换:org.apache.http替换为:org.apache.hc.client5.http
2、javax.servlet包替换为jakarta.servlet
项目全局替换:javax.servlet替换为jakarta.servlet
项目全局替换:javax.persistence替换为jakarta.persistence
项目全局替换:javax.transaction替换为 jakarta.transaction
3、RestTemplate配置
@Bean
public RestTemplate restTemplate() {
HttpComponentsClientHttpRequestFactory httpRequestFactory = new HttpComponentsClientHttpRequestFactory();
httpRequestFactory.setConnectionRequestTimeout(60*1000);
httpRequestFactory.setConnectTimeout(60*1000);
//httpRequestFactory.setReadTimeout(60*1000); 新版本中没有此方法
return new RestTemplate(httpRequestFactory);
}