SpringBoot3.3.0升級方案

? ? ? 本文介紹了由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依賴升級

<properties><java.version>17</java.version><mybatis-plus.version>3.5.6</mybatis-plus.version><flowable.version>7.0.0</flowable.version></properties>

<build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.1</version><configuration><source>${java.version}</source><target>${java.version}</target><encoding>${project.build.sourceEncoding}</encoding></configuration></plugin></plugins>
</build>

2、SpringBoot3.3.0依賴升級

<!-- SpringBoot的依賴配置-->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>3.3.0</version><type>pom</type><scope>import</scope>
</dependency>

3、mybatis-plus3.5.6依賴升級

<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>${mybatis-plus.version}</version><exclusions><exclusion><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId></exclusion></exclusions>
</dependency>
<dependency><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId><version>3.0.3</version>
</dependency>
<dependency><groupId>org.springframework</groupId><artifactId>spring-web</artifactId>
</dependency>
<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-core</artifactId><version>3.5.6</version><scope>compile</scope>
</dependency>

4、SpringSecurity6.3.0依賴升級

<dependency><groupId>org.springframework.security</groupId><artifactId>spring-security-config</artifactId><version>6.3.0</version>
</dependency>
<dependency><groupId>org.springframework.security</groupId><artifactId>spring-security-core</artifactId><version>6.3.0</version>
</dependency>

5、Swagger.3.0依賴升級

<dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>6.1.8</version>
</dependency>
<dependency><groupId>org.springdoc</groupId><artifactId>springdoc-openapi-starter-webmvc-ui</artifactId><version>2.3.0</version>
</dependency>
<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId>
</dependency>
<!-- openAPI包,替換?Swagger 的?SpringFox -->
<dependency><groupId>org.springdoc</groupId><artifactId>springdoc-openapi-starter-webmvc-ui</artifactId><version>2.3.0</version>
</dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId>
</dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional>
</dependency>
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope>
</dependency>

6、jakarta包替換

<dependency><groupId>jakarta.annotation</groupId><artifactId>jakarta.annotation-api</artifactId>
</dependency>

7、其他

<dependency><groupId>org.springframework</groupId><artifactId>spring-context-support</artifactId>
</dependency>
<dependency><groupId>org.springframework.security</groupId><artifactId>spring-security-core</artifactId>
</dependency>
<dependency><groupId>org.springframework</groupId><artifactId>spring-web</artifactId>
</dependency>
<dependency><groupId>jakarta.validation</groupId><artifactId>jakarta.validation-api</artifactId>
</dependency>
<dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId>
</dependency><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-annotations</artifactId>
</dependency>
<dependency><groupId>org.springframework</groupId><artifactId>spring-tx</artifactId>
</dependency>
<dependency><groupId>org.springframework</groupId><artifactId>spring-tx</artifactId>
</dependency>

版本查看:

?mvn -version

java -version

三、Swagger3.0升級(OpenAPI)

1、配置文件

OpenAPIConfig.java

package com.inspur.web.core.config;import io.swagger.v3.oas.models.ExternalDocumentation;
import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.info.Info;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;/*** @author: Inspur* @datetime: 2024/3/26* @desc:*/
@Configuration
public class OpenAPIConfig {@Beanpublic OpenAPI openAPI() {return new OpenAPI().info(new Info().title("接口文檔標題").description("SpringBoot3 集成?Swagger3接口文檔").version("v1")).externalDocs(new ExternalDocumentation().description("項目API文檔").url("/"));}
}

2、使用示例

SwaggerController.java

import io.swagger.v3.oas.annotations.Hidden;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.Parameters;
import io.swagger.v3.oas.annotations.responses.ApiResponse;
import io.swagger.v3.oas.annotations.responses.ApiResponses;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.web.bind.annotation.*;
/*** @author: zjl* @datetime: 2024/3/26* @desc:*/
@Tag(name = "控制器:測試Swagger3", description = "描述:測試Swagger3")
@RestController
public class SwaggerController {@Operation(summary = "測試Swagger3注解方法Get")@Parameters({@Parameter(name = "id",description = "編碼"),@Parameter(name = "headerValue",description = "header傳送內容")})@ApiResponses({@ApiResponse(responseCode = "200", description = "請求成功"),@ApiResponse(responseCode = "400", description = "請求參數沒填好"),@ApiResponse(responseCode = "401", description = "沒有權限"),@ApiResponse(responseCode = "403", description = "禁止訪問"),@ApiResponse(responseCode = "404", description = "請求路徑沒有或頁面跳轉路徑不對")})@GetMapping(value = "/swagger/student")public Object getStudent(@RequestParam @Parameter(example = "2") ?String id,@RequestHeader @Parameter(example = "2") String headerValue){return id;}@Operation(summary = "測試Swagger3注解方法Post")@ApiResponses({@ApiResponse(responseCode = "200", description = "請求成功"),@ApiResponse(responseCode = "400", description = "請求參數沒填好"),@ApiResponse(responseCode = "401", description = "沒有權限"),@ApiResponse(responseCode = "403", description = "禁止訪問"),@ApiResponse(responseCode = "404", description = "請求路徑沒有或頁面跳轉路徑不對")})@PostMapping(value = "/swagger/student", produces = "application/json")public SwaggerApiModel updateStudent(@RequestBody SwaggerApiModel model){return model;}/*** swagger 不暴漏該 api,通過@Hidden隱藏* 但是仍然可以訪問* @return*/@Hidden@GetMapping(value = "/swagger/hiddenApi")public String hiddenApi(){return "hiddenApi";}/*** swagger 暴漏該 api,沒有配置@Hidden會展示* @return*/@GetMapping(value = "/swagger/noHiddenApi")public String noHiddenApi(){return "noHiddenApi";}
}

3、swagger2和swagger3主要區別

四、SpringSecurity6

1、攔截器變化

?extends HandlerInterceptorAdapter

==>

implements HandlerInterceptor

自定義攔截器

implements WebMvcConfigurer

==>

extends WebMvcConfigurationSupport

跨域配置eg:ResourceConfig.java:

addAllowedOrigin ==>

addAllowedOriginPattern

@Configuration
public class ResourcesConfig implements WebMvcConfigurer
{@Bean
public CorsFilter corsFilter()
{// 設置訪問源地址
// config.addAllowedOrigin("*");config.addAllowedOriginPattern("*");}}

2、過濾器變化

antMatchers?==> requestMatchers

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

示例:

Spring2:

public class SecurityConfig extends WebSecurityConfigurerAdapter
{@Bean
@Override
public AuthenticationManager authenticationManagerBean() throws Exception
{return super.authenticationManagerBean();
}@Override
protected void configure(HttpSecurity httpSecurity) throws Exception
{httpSecurity// CSRF禁用,因為不使用session.csrf().disable()// 認證失敗處理類.exceptionHandling().authenticationEntryPoint(unauthorizedHandler).and()// 基于token,所以不需要session.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS).and()// 過濾請求.authorizeRequests()// 對于登錄login 注冊register 驗證碼captchaImage 允許匿名訪問.antMatchers("/login","/loginApp", "/appLogin","/register", "/captchaImage","/factory/getPublicKey").anonymous().antMatchers(HttpMethod.GET,"/","/*.html","/**/*.html","/**/*.css","/**/*.js","/profile/**").permitAll().antMatchers("/common/download**").anonymous()// 除上面外的所有請求全部需要鑒權認證.anyRequest().authenticated().and().headers().frameOptions().disable();
httpSecurity.logout().logoutUrl("/logout").logoutSuccessHandler(logoutSuccessHandler);
// 添加JWT filter
httpSecurity.addFilterBefore(authenticationTokenFilter, UsernamePasswordAuthenticationFilter.class);
// 添加CORS filter
httpSecurity.addFilterBefore(corsFilter, JwtAuthenticationTokenFilter.class);
httpSecurity.addFilterBefore(corsFilter, LogoutFilter.class);}@Overrideprotected void configure(AuthenticationManagerBuilder auth) throws Exception{auth.userDetailsService(userDetailsService).passwordEncoder(bCryptPasswordEncoder());}
}/*** 強散列哈希加密實現*/
@Bean
public BCryptPasswordEncoder bCryptPasswordEncoder()
{return new BCryptPasswordEncoder();
}}

Spring3:

@Configuration
@EnableWebSecurity
@AllArgsConstructor
@EnableMethodSecurity
public class SecurityConfig
{@Bean
public AuthenticationManager authenticationManager(AuthenticationConfiguration authenticationConfiguration) throws Exception {return authenticationConfiguration.getAuthenticationManager();
}@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {http// CSRF禁用,因為不使用session.csrf().disable()// 禁用HTTP響應標頭.headers().cacheControl().disable().and()// 認證失敗處理類.exceptionHandling().authenticationEntryPoint(unauthorizedHandler).and()// 基于token,所以不需要session.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS).and()// 過濾請求.authorizeRequests()// 對于登錄login 注冊register 驗證碼captchaImage 允許匿名訪問// ???????????????// 對于登錄login 注冊register 驗證碼captchaImage 允許匿名訪問.requestMatchers("/login","/loginApp", "/appLogin","/register", "/captchaImage","/factory/getPublicKey").anonymous().requestMatchers(HttpMethod.GET,"/","/*.html","/*/*.html","/*/*.css","/*/*.js","/profile/**").permitAll().requestMatchers("/common/download**").anonymous()// 除上面外的所有請求全部需要鑒權認證.anyRequest().authenticated().and().headers().frameOptions().disable();
// 添加Logout filter
http.logout().logoutUrl("/logout").logoutSuccessHandler(logoutSuccessHandler);
// 添加JWT filter
http.addFilterBefore(authenticationTokenFilter, UsernamePasswordAuthenticationFilter.class);
// 添加CORS filter
http.addFilterBefore(corsFilter, JwtAuthenticationTokenFilter.class);
http.addFilterBefore(corsFilter, LogoutFilter.class);}/*** 強散列哈希加密實現*/
@Bean
public BCryptPasswordEncoder bCryptPasswordEncoder()
{return new BCryptPasswordEncoder();
}}

五、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)

八、配置文件修改

# swagger3spring:mvc:pathmatch:matching-strategy: ant_path_matcher# 升級后可能導致不支持Bean的注入依賴,可以在配置文件解決main:allow-circular-references:?true ?#允許循環依賴

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/44612.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/44612.shtml
英文地址,請注明出處:http://en.pswp.cn/web/44612.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

開發技術-Java BigDecimal 精度丟失問題

文章目錄 1. 背景2. 方法3. 總結 1. 背景 昨天和小伙伴排查一個問題時&#xff0c;發現一個 BigDecimal 精度丟失的問題&#xff0c;即 double a 1.1;BigDecimal ba new BigDecimal(a).subtract(new BigDecimal(0.1));System.out.println(ba);輸出&#xff1a; 1.000000000…

構建自定義Tensorflow鏡像時用到的鏈接地址整理

NVIDIA相關&#xff1a; NVIDIA CUDA鏡像的docker hub&#xff1a;https://hub.docker.com/r/nvidia/cuda/tags?page&page_size&ordering&name12.4.1NVIDIA 構建的Tensorflow鏡像包&#xff1a;https://docs.nvidia.com/deeplearning/frameworks/tensorflow-rele…

項目屬性的精粹:Gradle中配置項目屬性的全面指南

項目屬性的精粹&#xff1a;Gradle中配置項目屬性的全面指南 在構建自動化的宏偉藍圖中&#xff0c;Gradle以其靈活的項目屬性配置脫穎而出。項目屬性是構建過程中可配置的參數&#xff0c;它們可以控制構建行為、定義條件邏輯&#xff0c;甚至影響依賴解析。本文將深入探討如…

Vue3 使用 Vue Router 時,prams 傳參失效和報錯問題

Discarded invalid param(s) “id“, “name“, “age“ when navigating 我嘗試使用 prams 傳遞數據 <script setup> import { useRouter } from vue-routerconst router useRouter() const params { id: 1, name: ly, phone: 13246566476, age: 23 } const toDetail…

快速使用BRTR公式出具的大模型Prompt提示語

Role:文章模仿大師 Background: 你是一位文章模仿大師&#xff0c;擅長分析文章風格并進行模仿創作。老板常讓你學習他人文章后進行模仿創作。 Attention: 請專注在文章模仿任務上&#xff0c;提供高質量的輸出。 Profile: Author: 一博Version: 1.0Language: 中文Descri…

半邊數據結構學習

半邊數據結構學習 一、網格數據結構二、半邊數據結構頂點(Vertex)半邊(HalfEdge)面片(Face) 三、OpenMesh 相關代碼拓撲關聯對象遍歷 四、OpenFilpper 相關代碼HoleInfo類孔洞檢測孔洞信息HoleFiller類孔洞補全 一、網格數據結構 對于表面網絡來說&#xff0c;其關鍵在于拓撲&…

【MySQL系列】VARCHAR的底層存儲

&#x1f49d;&#x1f49d;&#x1f49d;歡迎來到我的博客&#xff0c;很高興能夠在這里和您見面&#xff01;希望您在這里可以感受到一份輕松愉快的氛圍&#xff0c;不僅可以獲得有趣的內容和知識&#xff0c;也可以暢所欲言、分享您的想法和見解。 推薦:kwan 的首頁,持續學…

python-親和數(賽氪OJ)

[題目描述] 古希臘數學家畢達哥拉斯在自然數研究中發現&#xff0c;220 的所有真約數(即不是自身的約數)之和為&#xff1a; 1245101120224455110&#xff1d;284 。 而 284 的所有真約為 1 、 2 、 4 、 71 、 142 &#xff0c;加起來恰好為 220 。人們對這樣的數感到很驚奇&a…

頤養優選元宇宙

頤養優選是一個專注于為中老年人提供高品質養老服務的品牌或平臺。它通常涵蓋了一系列服務和產品&#xff0c;旨在幫助老年人享受健康、舒適、有尊嚴的晚年生活。這些服務可能包括但不限于以下幾個方面&#xff1a; ###健康管理 -**定期體檢**&#xff1a;提供定期的身體健康檢…

如何搞定美國TikTok直播網絡?

在全球范圍內&#xff0c;TikTok已經積累了超過30億次的下載量&#xff0c;月活躍用戶達到13億以上&#xff0c;支持75種語言&#xff0c;覆蓋了150多個國家和地區。這一龐大的流量池吸引了眾多國內電商人嘗試在TikTok上進行業務拓展。本文將探討如果要在美國運營TikTok直播&am…

ruoyi定時任務使用

使用沒有什么特別的&#xff0c;不再贅述&#xff0c;可參見前端文檔 或下面的文章 ruoyi若依定時任務的基本使用_若依框架定時任務怎么用-CSDN博客 只說一下被調度任務的建立 1、在調用的類上添加Component("后期在調用任務創建用的偽類的名稱") 稱為偽類是因為…

MySql性能調優03-[SQL優化]

SQL優化 MySQL優化SQL優化-不要寫select *SQL優化-小表驅動大表&#xff0c;而不是大表驅動小表SQL優化-連接查詢代替子查詢SQL優化-提升group by的效率SQL優化-使用limitSQL優化-union all代替unionSQL優化-join的表不宜過多 MySQL優化 trace工具 set session optimizer_trac…

把Docker的虛擬磁盤文件移動到別的盤符

今天清理C盤空間&#xff0c;發現一個很大的文件 ext4.vhdx 足有 15G 之多&#xff0c;發現這個是Docker的虛擬磁盤文件&#xff0c;于是在網上找到移到它的辦法&#xff0c;使用 PowerShell 執行下面命令 查看Docker狀態和版本 wsl -l -v 關閉Docker服務 wsl --shutdown …

Kithara與OpenCV (一)

Kithara使用 OpenCV 庫 目錄 Kithara使用 OpenCV 庫簡介需求和支持的環境構建 OpenCV 庫使用 CMake 進行配置以與 Kithara 一起工作 使用 OpenCV 庫設置項目運行 OpenCV 代碼圖像采集和 OpenCV自動并行化限制和局限性1.系統建議2.實時限制3.不支持的功能和缺失的功能4.顯示 Ope…

Python 數據類型與基礎概念

在 Python 編程中&#xff0c;理解和掌握數據類型和基礎概念是至關重要的。這些概念不僅幫助我們更有效地編寫代碼&#xff0c;還使我們能夠創建更加復雜和功能豐富的應用程序。本文將詳細介紹 Python 中的基本數據類型及其相關操作&#xff0c;并涵蓋一些重要的基礎概念。 1.…

數字化打造行業生態產業鏈,企業新增益全知道

在當今數字化時代&#xff0c;利用數字化打造行業生態產業鏈成為企業發展的重要戰略選擇。那么&#xff0c;這一舉措究竟能為企業帶來哪些新增益呢&#xff1f;讓我們一探究竟。 一、運營效率大幅提高 數字化技術就像一條神奇的紐帶&#xff0c;將產業鏈上的各個環節緊緊相…

Python函數 之 匿名函數

1.概念 匿名函數: 使用 lambda 關鍵字 定義的表達式&#xff0c;稱為匿名函數. 2.語法 lambda 參數, 參數: 一行代碼 # 只能實現簡單的功能&#xff0c;只能寫一行代碼 # 匿名函數 一般不直接調用&#xff0c;作為函數的參數使用的 3.代碼 4.練習 # 1, 定義匿名函數, 參數…

32路串口服務器 應用領域

32路串口服務器在多個領域有著廣泛的應用&#xff0c;以下是詳細的應用實例&#xff1a; 一、工業自動化 在工業自動化領域&#xff0c;32路串口服務器發揮著舉足輕重的作用。傳統的工業設備往往采用串口通信方式&#xff0c;而串口服務器能夠將這些設備接入網絡&#xff0c;…

C++ 開源庫

1 PDFium PDFium 是一個開源的 PDF 渲染和處理庫&#xff0c;最初由 Foxit Software 開發&#xff0c;并于2014年捐贈給了 Chromium 項目。PDFium 旨在為各種應用程序提供高效、靈活的 PDF 渲染和操作功能。 2 代碼地址 https://github.com/chromium/pdfium 主要特性 渲染…

集訓 Day 3 總結 虛樹 + dfs tree + 基環樹

虛樹 虛樹&#xff0c;顧名思義是 只關注原樹上的某些 關鍵點&#xff0c;在保留原樹祖孫關系的前提下建出的一棵邊數、點數大大減少的樹 適用于優化某些在整棵樹上進行 d p dp dp、 d f s dfs dfs 的問題 通常是題目中出現多次詢問&#xff0c;每次給出樹上的一些關鍵點&a…