随着Spring Framework URL解析不当漏洞(CVE-2024-22243)的发布,springboot升级到3.x迫在眉睫,2.x的版本官方并未提供该漏洞的修复版本,后续应该也不会再发布新的版本。
2.x升级到3.x是一次大的跨越,接下来,本人结合实践经验,浅淡一下需要注重的地方。
一、JDK变化
Spring Boot 3.0.0 需要 Java 17,下载地址Java Archive Downloads - Java SE 17,根据自己的系统版本选择下载即可
二、配置变化
1、Redis配置变化
Redis配置对比2.x版本,在spring下多了一个data层级,如下所示:
2、日志配置变化
日志配置主要是日志的大小和保存历史等配置项和2.x版本不同,3.x版本增加了logback节点,如下所示:
三、代码变化
1、mysql的依赖需要手动指定版本或者替换成 mysql-connector-j
如下如所示,手动指定适合你的版本即可
或者替换成如下依赖
<!-- jdbc -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<!-- mysql -->
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<scope>runtime</scope>
</dependency>
2、javax.servlet包替换为jakarta.servlet
涉及的类包括ServletRequest、HttpServletRequest、ServletResponse、HttpServletResponse等,如下图所示:
3、javax.validation包替换为jakarta.validation
涉及的注解包括@Valid、@NotNUll、@NotBlank、@NotEmpty等。
4、允许跨域设置由addAllowedOrigin替换为addAllowedOriginPattern
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import org.springframework.web.filter.CorsFilter;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
/**
* 配置注册
*
* @author ldy
* @date 2024/03/06
* @since V1.0.1
*/
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/**").addResourceLocations("classpath:/static/");
}
private CorsConfiguration buildConfig() {
CorsConfiguration corsConfiguration = new CorsConfiguration();
//corsConfiguration.addAllowedOrigin("*");
corsConfiguration.addAllowedOriginPattern("*");
corsConfiguration.setAllowCredentials(true);
corsConfiguration.addAllowedHeader("*");
corsConfiguration.addAllowedMethod("*");
return corsConfiguration;
}
@Bean
public CorsFilter corsFilter() {
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
source.registerCorsConfiguration("/**", buildConfig());
return new CorsFilter(source);
}
}
四、mybatis-plus依赖包替换
如果使用了mybatis-plus的话需要将mybatis-plus-boot-starter依赖包替换成mybatis-plus-spring-boot3-starter,如果用到了代码生成器mybatis-plus-generator的话,还要同时升级代码生成器的依赖包,我这里升级到3.5.5版本,升级前后对比如下:
升级前:
<!-- mybatis plus -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.1</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-support</artifactId>
<version>2.3.3</version>
</dependency>
<!-- mybatis plus 代码生成器依赖 -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.4.1</version>
</dependency>
升级后:
<!-- mybatis plus -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-spring-boot3-starter</artifactId>
<version>3.5.5</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-support</artifactId>
<version>2.3.3</version>
</dependency>
<!-- mybatis plus 代码生成器依赖 -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.5.5</version>
</dependency>
注意:升级后代码生成工具类也需要修改后才能用,代码生成工具类参考
springboot3.x集成mybatis-plus代码生成工具https://blog.csdn.net/LDY1016/article/details/142848395
同时,原xxxMapper代码里面的注解需要使用@Mapper,原实体类代码 extends Model<xxx> 部分替换为implements Serializable
还需要删除原实体类里面的下列方法,如果原来有的话:
@Override
protected Serializable pkVal() {
return this.id;
}