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
RequestConfig requestConfig = RequestConfig.custom()
                        //替换成新的
     					.setConnectionRequestTimeout(Timeout.ofMilliseconds(5*1000))
     					.setResponseTimeout(Timeout.ofMilliseconds(5*1000))
     					// 原来的  设置连接超时时间(单位毫秒)
     					//.setConnectTimeout(5000)
     					// 设置请求超时时间(单位毫秒)
     					//.setConnectionRequestTimeout(5000)
     					// socket读写超时时间(单位毫秒)
     					//.setSocketTimeout(5000)
     					// 设置是否允许重定向(默认为true)
     					.setRedirectsEnabled(true).build();

 httpclient5 忽略证书 替换

 /*SSLConnectionSocketFactory scsf = new SSLConnectionSocketFactory(SSLContexts.custom().loadTrustMaterial(null, new TrustSelfSignedStrategy()).build(),NoopHostnameVerifier.INSTANCE);
        //CloseableHttpClient httpClient = HttpClientBuilder.create().build();
        CloseableHttpClient httpClient = HttpClients.custom().setSSLSocketFactory(scsf).build();*/
//httpclient5  访问https,忽略证书替换为
        CloseableHttpClient httpClient = HttpClients.custom()
                .setConnectionManager(PoolingHttpClientConnectionManagerBuilder.create()
                        .setSSLSocketFactory(SSLConnectionSocketFactoryBuilder.create()
                                .setSslContext(SSLContextBuilder.create()
                                        .loadTrustMaterial(TrustAllStrategy.INSTANCE)
                                        .build())
                                .setHostnameVerifier(NoopHostnameVerifier.INSTANCE)
                                .build())
                        .build())
                .build();

 httpclient5升级可以参考https://www.cnblogs.com/milton/p/17017446.html

2、javax.servlet包替换为jakarta.servlet

项目全局替换:javax.servlet替换为jakarta.servlet

项目全局替换:javax.persistence替换为jakarta.persistence

项目全局替换:javax.transaction替换为 jakarta.transaction

3、缓存配置修改

<!--<dependency>
		<groupId>net.sf.ehcache</groupId>
		<artifactId>ehcache</artifactId>
<dependency>-->
	<dependency>
	    <groupId>org.ehcache</groupId>
	    <artifactId>ehcache</artifactId>
	</dependency>

4、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);
    }
6、logback配置修改
https://blog.csdn.net/u013737132/article/details/14306428277

7 打包jar时报错了

发现要下载新eclipse。并且需要修改maven配置文件,记得把maven的setting.conf配置文件改成21版本的。

<profile>
		<!--<id>jdk-1.8</id>
		<activation>
			<activeByDefault>true</activeByDefault>
			<jdk>1.8</jdk>
		</activation>
		<properties>
			<maven.compiler.source>1.8</maven.compiler.source>
			<maven.compiler.target>1.8</maven.compiler.target>
			<maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
		</properties>-->
		<id>jdk21</id>
		<activation>
			<activeByDefault>true</activeByDefault>
			<jdk>21</jdk>
		</activation>
		<properties>
			<maven.compiler.source>21</maven.compiler.source>
			<maven.compiler.target>21</maven.compiler.target>
			<maven.compiler.compilerVersion>21</maven.compiler.compilerVersion>
		</properties>
	</profile>

出现这个错误的原因是在导入seaborn包时,无法从typing模块中导入名为&#39;Protocol&#39;的对象。 解决这个问题的方法有以下几种: 1. 检查你的Python版本是否符合seaborn包的要求,如果不符合,尝试更新Python版本。 2. 检查你的环境中是否安装了typing_extensions包,如果没有安装,可以使用以下命令安装:pip install typing_extensions。 3. 如果你使用的是Python 3.8版本以下的版本,你可以尝试使用typing_extensions包来代替typing模块来解决该问题。 4. 检查你的代码是否正确导入了seaborn包,并且没有其他导入错误。 5. 如果以上方法都无法解决问题,可以尝试在你的代码中使用其他的可替代包或者更新seaborn包的版本来解决该问题。 总结: 出现ImportError: cannot import name &#39;Protocol&#39; from &#39;typing&#39;错误的原因可能是由于Python版本不兼容、缺少typing_extensions包或者导入错误等原因造成的。可以根据具体情况尝试上述方法来解决该问题。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [ImportError: cannot import name ‘Literal‘ from ‘typing‘ (D:\Anaconda\envs\tensorflow\lib\typing....](https://blog.csdn.net/yuhaix/article/details/124528628)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值