0


SpringBoot3.3.0升级方案

  1. 本文介绍了由SpringBoot2升级到SpringBoot3.3.0升级方案,新版本的升级可以解决旧版本存在的部分漏洞问题。

一、jdk17下载安装

1、下载

官网下载地址

Java Archive Downloads - Java SE 17

Jdk17下载后,可不设置系统变量java_home,仅在idea的指定项目中设置即可。

2、Jdk17项目环境设置

a).File-->Settings-->Build,Execution,Deployment-->Compiler-->Java Compiler

b).File-->Project Settings-->modules

source和Dependencies均设置为jdk17

c).File-->Plateform Settings-->SDKS

d).启动类Edit Configuration-->Run/Debug Configurations

二、依赖升级

主要依赖升级和替换引入

Java17 && Spring3.3.0 && mybatis-plus3.5.6 && Spring Security6.3.0 && Swagger3 && jakarta &&maven3.6

1、Java17依赖升级

  1. <properties>
  2. <java.version>17</java.version>
  3. <mybatis-plus.version>3.5.6</mybatis-plus.version>
  4. <flowable.version>7.0.0</flowable.version>
  5. </properties>
  1. <build>
  2. <plugins>
  3. <plugin>
  4. <groupId>org.apache.maven.plugins</groupId>
  5. <artifactId>maven-compiler-plugin</artifactId>
  6. <version>3.1</version>
  7. <configuration>
  8. <source>${java.version}</source>
  9. <target>${java.version}</target>
  10. <encoding>${project.build.sourceEncoding}</encoding>
  11. </configuration>
  12. </plugin>
  13. </plugins>
  14. </build>

2、SpringBoot3.3.0依赖升级

  1. <!-- SpringBoot的依赖配置-->
  2. <dependency>
  3. <groupId>org.springframework.boot</groupId>
  4. <artifactId>spring-boot-dependencies</artifactId>
  5. <version>3.3.0</version>
  6. <type>pom</type>
  7. <scope>import</scope>
  8. </dependency>

3、mybatis-plus3.5.6依赖升级

  1. <dependency>
  2. <groupId>com.baomidou</groupId>
  3. <artifactId>mybatis-plus-boot-starter</artifactId>
  4. <version>${mybatis-plus.version}</version>
  5. <exclusions>
  6. <exclusion>
  7. <groupId>org.mybatis</groupId>
  8. <artifactId>mybatis-spring</artifactId>
  9. </exclusion>
  10. </exclusions>
  11. </dependency>
  12. <dependency>
  13. <groupId>org.mybatis</groupId>
  14. <artifactId>mybatis-spring</artifactId>
  15. <version>3.0.3</version>
  16. </dependency>
  1. <dependency>
  2. <groupId>org.springframework</groupId>
  3. <artifactId>spring-web</artifactId>
  4. </dependency>
  5. <dependency>
  6. <groupId>com.baomidou</groupId>
  7. <artifactId>mybatis-plus-core</artifactId>
  8. <version>3.5.6</version>
  9. <scope>compile</scope>
  10. </dependency>

4、SpringSecurity6.3.0依赖升级

  1. <dependency>
  2. <groupId>org.springframework.security</groupId>
  3. <artifactId>spring-security-config</artifactId>
  4. <version>6.3.0</version>
  5. </dependency>
  6. <dependency>
  7. <groupId>org.springframework.security</groupId>
  8. <artifactId>spring-security-core</artifactId>
  9. <version>6.3.0</version>
  10. </dependency>

5、Swagger.3.0依赖升级

  1. <dependency>
  2. <groupId>org.springframework</groupId>
  3. <artifactId>spring-webmvc</artifactId>
  4. <version>6.1.8</version>
  5. </dependency>
  6. <dependency>
  7. <groupId>org.springdoc</groupId>
  8. <artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
  9. <version>2.3.0</version>
  10. </dependency>
  11. <dependency>
  12. <groupId>org.projectlombok</groupId>
  13. <artifactId>lombok</artifactId>
  14. </dependency>
  1. <!-- openAPI包,替换 Swagger 的 SpringFox -->
  2. <dependency>
  3. <groupId>org.springdoc</groupId>
  4. <artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
  5. <version>2.3.0</version>
  6. </dependency>
  7. <dependency>
  8. <groupId>org.springframework.boot</groupId>
  9. <artifactId>spring-boot-starter-web</artifactId>
  10. </dependency>
  11. <dependency>
  12. <groupId>org.projectlombok</groupId>
  13. <artifactId>lombok</artifactId>
  14. <optional>true</optional>
  15. </dependency>
  16. <dependency>
  17. <groupId>org.springframework.boot</groupId>
  18. <artifactId>spring-boot-starter-test</artifactId>
  19. <scope>test</scope>
  20. </dependency>

6、jakarta包替换

  1. <dependency>
  2. <groupId>jakarta.annotation</groupId>
  3. <artifactId>jakarta.annotation-api</artifactId>
  4. </dependency>

7、其他

  1. <dependency>
  2. <groupId>org.springframework</groupId>
  3. <artifactId>spring-context-support</artifactId>
  4. </dependency>
  5. <dependency>
  6. <groupId>org.springframework.security</groupId>
  7. <artifactId>spring-security-core</artifactId>
  8. </dependency>
  9. <dependency>
  10. <groupId>org.springframework</groupId>
  11. <artifactId>spring-web</artifactId>
  12. </dependency>
  13. <dependency>
  14. <groupId>jakarta.validation</groupId>
  15. <artifactId>jakarta.validation-api</artifactId>
  16. </dependency>
  17. <dependency>
  18. <groupId>org.apache.commons</groupId>
  19. <artifactId>commons-lang3</artifactId>
  20. </dependency>
  21. <dependency>
  22. <groupId>com.fasterxml.jackson.core</groupId>
  23. <artifactId>jackson-annotations</artifactId>
  24. </dependency>
  25. <dependency>
  26. <groupId>org.springframework</groupId>
  27. <artifactId>spring-tx</artifactId>
  28. </dependency>
  29. <dependency>
  30. <groupId>org.springframework</groupId>
  31. <artifactId>spring-tx</artifactId>
  32. </dependency>

版本查看:

mvn -version

java -version

三、Swagger3.0升级(OpenAPI)

1、配置文件

OpenAPIConfig.java

  1. package com.inspur.web.core.config;
  2. import io.swagger.v3.oas.models.ExternalDocumentation;
  3. import io.swagger.v3.oas.models.OpenAPI;
  4. import io.swagger.v3.oas.models.info.Info;
  5. import org.springframework.context.annotation.Bean;
  6. import org.springframework.context.annotation.Configuration;
  7. /**
  8. * @author: Inspur
  9. * @datetime: 2024/3/26
  10. * @desc:
  11. */
  12. @Configuration
  13. public class OpenAPIConfig {
  14. @Bean
  15. public OpenAPI openAPI() {
  16. return new OpenAPI()
  17. .info(new Info()
  18. .title("接口文档标题")
  19. .description("SpringBoot3 集成 Swagger3接口文档")
  20. .version("v1"))
  21. .externalDocs(new ExternalDocumentation()
  22. .description("项目API文档")
  23. .url("/"));
  24. }
  25. }

2、使用示例

SwaggerController.java

  1. import io.swagger.v3.oas.annotations.Hidden;
  2. import io.swagger.v3.oas.annotations.Operation;
  3. import io.swagger.v3.oas.annotations.Parameter;
  4. import io.swagger.v3.oas.annotations.Parameters;
  5. import io.swagger.v3.oas.annotations.responses.ApiResponse;
  6. import io.swagger.v3.oas.annotations.responses.ApiResponses;
  7. import io.swagger.v3.oas.annotations.tags.Tag;
  8. import org.springframework.web.bind.annotation.*;
  9. /**
  10. * @author: zjl
  11. * @datetime: 2024/3/26
  12. * @desc:
  13. */
  14. @Tag(name = "控制器:测试Swagger3", description = "描述:测试Swagger3")
  15. @RestController
  16. public class SwaggerController {
  17. @Operation(summary = "测试Swagger3注解方法Get")
  18. @Parameters({@Parameter(name = "id",description = "编码"),
  19. @Parameter(name = "headerValue",description = "header传送内容")})
  20. @ApiResponses({
  21. @ApiResponse(responseCode = "200", description = "请求成功"),
  22. @ApiResponse(responseCode = "400", description = "请求参数没填好"),
  23. @ApiResponse(responseCode = "401", description = "没有权限"),
  24. @ApiResponse(responseCode = "403", description = "禁止访问"),
  25. @ApiResponse(responseCode = "404", description = "请求路径没有或页面跳转路径不对")
  26. })
  27. @GetMapping(value = "/swagger/student")
  28. public Object getStudent(@RequestParam @Parameter(example = "2") String id,
  29. @RequestHeader @Parameter(example = "2") String headerValue){
  30. return id;
  31. }
  32. @Operation(summary = "测试Swagger3注解方法Post")
  33. @ApiResponses({
  34. @ApiResponse(responseCode = "200", description = "请求成功"),
  35. @ApiResponse(responseCode = "400", description = "请求参数没填好"),
  36. @ApiResponse(responseCode = "401", description = "没有权限"),
  37. @ApiResponse(responseCode = "403", description = "禁止访问"),
  38. @ApiResponse(responseCode = "404", description = "请求路径没有或页面跳转路径不对")
  39. })
  40. @PostMapping(value = "/swagger/student", produces = "application/json")
  41. public SwaggerApiModel updateStudent(@RequestBody SwaggerApiModel model){
  42. return model;
  43. }
  44. /**
  45. * swagger 不暴漏该 api,通过@Hidden隐藏
  46. * 但是仍然可以访问
  47. * @return
  48. */
  49. @Hidden
  50. @GetMapping(value = "/swagger/hiddenApi")
  51. public String hiddenApi(){
  52. return "hiddenApi";
  53. }
  54. /**
  55. * swagger 暴漏该 api,没有配置@Hidden会展示
  56. * @return
  57. */
  58. @GetMapping(value = "/swagger/noHiddenApi")
  59. public String noHiddenApi(){
  60. return "noHiddenApi";
  61. }
  62. }

3、swagger2和swagger3主要区别

四、SpringSecurity6

1、拦截器变化

extends HandlerInterceptorAdapter

==>

implements HandlerInterceptor

自定义拦截器

implements WebMvcConfigurer

==>

extends WebMvcConfigurationSupport

跨域配置eg:ResourceConfig.java:

addAllowedOrigin ==>

addAllowedOriginPattern

  1. @Configuration
  2. public class ResourcesConfig implements WebMvcConfigurer
  3. {
  4. @Bean
  5. public CorsFilter corsFilter()
  6. {
  7. // 设置访问源地址
  8. // config.addAllowedOrigin("*");
  9. config.addAllowedOriginPattern("*");
  10. }
  11. }

2、过滤器变化

antMatchers ==> requestMatchers

匹配地址时 “*”==> “

示例:

Spring2:

  1. public class SecurityConfig extends WebSecurityConfigurerAdapter
  2. {
  3. @Bean
  4. @Override
  5. public AuthenticationManager authenticationManagerBean() throws Exception
  6. {
  7. return super.authenticationManagerBean();
  8. }
  9. @Override
  10. protected void configure(HttpSecurity httpSecurity) throws Exception
  11. {
  12. httpSecurity
  13. // CSRF禁用,因为不使用session
  14. .csrf().disable()
  15. // 认证失败处理类
  16. .exceptionHandling().authenticationEntryPoint(unauthorizedHandler).and()
  17. // 基于token,所以不需要session
  18. .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS).and()
  19. // 过滤请求
  20. .authorizeRequests()
  21. // 对于登录login 注册register 验证码captchaImage 允许匿名访问
  22. .antMatchers("/login","/loginApp", "/appLogin","/register", "/captchaImage","/factory/getPublicKey").anonymous()
  23. .antMatchers(
  24. HttpMethod.GET,
  25. "/",
  26. "/*.html",
  27. "/**/*.html",
  28. "/**/*.css",
  29. "/**/*.js",
  30. "/profile/**"
  31. ).permitAll()
  32. .antMatchers("/common/download**").anonymous()
  33. // 除上面外的所有请求全部需要鉴权认证
  34. .anyRequest().authenticated()
  35. .and()
  36. .headers().frameOptions().disable();
  37. httpSecurity.logout().logoutUrl("/logout").logoutSuccessHandler(logoutSuccessHandler);
  38. // 添加JWT filter
  39. httpSecurity.addFilterBefore(authenticationTokenFilter, UsernamePasswordAuthenticationFilter.class);
  40. // 添加CORS filter
  41. httpSecurity.addFilterBefore(corsFilter, JwtAuthenticationTokenFilter.class);
  42. httpSecurity.addFilterBefore(corsFilter, LogoutFilter.class);
  43. }
  44. @Override
  45. protected void configure(AuthenticationManagerBuilder auth) throws Exception
  46. {
  47. auth.userDetailsService(userDetailsService).passwordEncoder(bCryptPasswordEncoder());
  48. }
  49. }
  50. /**
  51. * 强散列哈希加密实现
  52. */
  53. @Bean
  54. public BCryptPasswordEncoder bCryptPasswordEncoder()
  55. {
  56. return new BCryptPasswordEncoder();
  57. }
  58. }

Spring3:

  1. @Configuration
  2. @EnableWebSecurity
  3. @AllArgsConstructor
  4. @EnableMethodSecurity
  5. public class SecurityConfig
  6. {
  7. @Bean
  8. public AuthenticationManager authenticationManager(AuthenticationConfiguration authenticationConfiguration) throws Exception {
  9. return authenticationConfiguration.getAuthenticationManager();
  10. }
  11. @Bean
  12. public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
  13. http
  14. // CSRF禁用,因为不使用session
  15. .csrf().disable()
  16. // 禁用HTTP响应标头
  17. .headers().cacheControl().disable().and()
  18. // 认证失败处理类
  19. .exceptionHandling().authenticationEntryPoint(unauthorizedHandler).and()
  20. // 基于token,所以不需要session
  21. .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS).and()
  22. // 过滤请求
  23. .authorizeRequests()
  24. // 对于登录login 注册register 验证码captchaImage 允许匿名访问
  25. // // 对于登录login 注册register 验证码captchaImage 允许匿名访问
  26. .requestMatchers("/login","/loginApp", "/appLogin","/register", "/captchaImage","/factory/getPublicKey").anonymous()
  27. .requestMatchers(
  28. HttpMethod.GET,
  29. "/",
  30. "/*.html",
  31. "/*/*.html",
  32. "/*/*.css",
  33. "/*/*.js",
  34. "/profile/**"
  35. ).permitAll()
  36. .requestMatchers("/common/download**").anonymous()
  37. // 除上面外的所有请求全部需要鉴权认证
  38. .anyRequest().authenticated()
  39. .and()
  40. .headers().frameOptions().disable();
  41. // 添加Logout filter
  42. http.logout().logoutUrl("/logout").logoutSuccessHandler(logoutSuccessHandler);
  43. // 添加JWT filter
  44. http.addFilterBefore(authenticationTokenFilter, UsernamePasswordAuthenticationFilter.class);
  45. // 添加CORS filter
  46. http.addFilterBefore(corsFilter, JwtAuthenticationTokenFilter.class);
  47. http.addFilterBefore(corsFilter, LogoutFilter.class);
  48. }
  49. /**
  50. * 强散列哈希加密实现
  51. */
  52. @Bean
  53. public BCryptPasswordEncoder bCryptPasswordEncoder()
  54. {
  55. return new BCryptPasswordEncoder();
  56. }
  57. }

五、Maven3.6

六、javax替换 Jakarta

批量替换:

javax.persistence.* -> jakarta.persistence.*

javax.validation.* -> jakarta.validation.*

javax.servlet.* -> jakarta.servlet.*

javax.annotation.* -> jakarta.annotation.*

javax.transaction.* -> jakarta.transaction.*

import javax. ==> import jakarta.

或者使用idea工具:Refactor==>Migrate

七、controller请求地址问题

对于GetMapping方法,@PathVariable(“roleId”) 需要注明变量名

public AjaxResult getInfo(@PathVariable Long roleId)

==>

public AjaxResult getInfo(@PathVariable("roleId") Long roleId)

八、配置文件修改

  1. # swagger3
  2. spring:
  3. mvc:
  4. pathmatch:
  5. matching-strategy: ant_path_matcher
  6. # 升级后可能导致不支持Bean的注入依赖,可以在配置文件解决
  7. main:
  8. allow-circular-references: true #允许循环依赖
标签: java 开发语言

本文转载自: https://blog.csdn.net/xingyuemengjin/article/details/140389165
版权归原作者 曼曼青青草 所有, 如有侵权,请联系我们删除。

“SpringBoot3.3.0升级方案”的评论:

还没有评论