Sa-Token 整合Java17和SpringBoot

目錄

    • 前言
    • 引入項目
    • 開啟登錄認證
    • 路由攔截鑒權
    • 解決兼容問題
    • 總結

前言

之前無意中發現Sa-Token權限認證框架,項目十分好用。

  • 項目地址: https://github.com/dromara/sa-token
  • 官網地址: https://sa-token.cc/doc.html#/start/example

我的個人項目使用的是Kotlin+JDK17+SpringBoo3t , 于是我也想在這個項目中使用, 可是發現有很多的問題, 無法兼容17的jdk版本,主要原因是17版本都javax.servlet相關的包都更名成jakarta.servlet了, 于是進行了適當的改造。

這個框架也提供了支持SpringBoot3的版本, 現在可以直接使用了。

我的個人項目地址: https://github.com/blanexie/vxph
本次修改的類路徑: com.github.blanexie.vxph.common.satoken

感興趣的可以直接看源碼。

引入項目

官網的相關示例如下:
https://sa-token.cc/doc.html#/start/example
在這里插入圖片描述
很簡單,引入包配置好文件就可以了。 這個

開啟登錄認證

官網的描述很詳細, 我就簡單貼下圖
https://sa-token.cc/doc.html#/use/login-auth
在這里插入圖片描述

路由攔截鑒權

當然也支持接口注解鑒權, 但是路由鑒權更靈活, 可以自定義鑒權邏輯, 我后期是想把接口和相關權限角色信息全部寫入數據庫中, 然后自定義鑒權邏輯,訪問數據庫表來實現權限攔截。 這樣可以方便的通過修改表記錄就能配置相關權限信息, 比硬編碼注解到代碼中要靈活

https://sa-token.cc/doc.html#/use/route-check
在這里插入圖片描述

解決兼容問題

按照上面的配置完成后,啟動項目都是沒有報錯沒有問題的, 可是無論怎樣弄就是不生效, 不會進行權限攔截。 于是我去看了下引入的jar包和對應的源碼。

  1. 我在項目中引入的是: implementation("cn.dev33:sa-token-spring-boot-starter:1.37.0")
  2. 然后這個包間接引入了三個包 在這里插入圖片描述
  3. 可以看到其中cn.dev33:sa-token-spring-boot-startercn.dev33:sa-token-spring-boot-autoconfig 明顯是和SpringBoot集成相關的。 于是打開兩個包查看源碼。
  4. 發現 cn.dev33:sa-token-spring-boot-starter 是和javax.servlet 相關的, 并且其中的類比較少和簡單。 于是我把其中的類全部復制到我的項目的com.github.blanexie.vxph.common.satoken包路徑中,并且把其中的javax.servlet 包名全部換成jakarta.servlet包名。
  5. 要注意官方包是通過spring.factories文件的方式把SaTokenContextRegister類引入到Spring的容器中來完成集成的。 因此復制了后,需要我們手動把這個類加入到容器中, 很簡單直接在這個類上面加上@Configuration注解
    在這里插入圖片描述
  6. 刪除 cn.dev33:sa-token-spring-boot-starter 包的引入, 注意SaToken的其他核心包是通過這個包間接引入的,所以我們還需要手動引入其他包。 在這里插入圖片描述
  7. 至此整個整合動作完成,啟動項目,訪問相關接口, 生效OK
    在這里插入圖片描述
    在這里插入圖片描述

總結

Java21已經發布了, 并且包含激動人心的虛擬線程功能, 要跟上時代的腳步。

本文章解決的問題就是 Java17相關包名稱修改導致的問題, 需要的了解相關SpringBootstarter模塊的知識。 需要了解Gradle/Maven包依賴引入的關系知識等。

其實只要知道根本底層原理,很多問題都有解決方案的。

下篇文章講解如何設計權限角色表, 并且配合SaToken來實現權限控制的動態改變。

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

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

相關文章

如何輕松應對企業網絡管理挑戰,釋放網絡靈活性

企業在日常經營中,越來越依賴于云應用程序,分散的團隊和統一通信。這些變化使得保持網絡連接性不僅是必要的,而且對任務的成功完成至關重要。 傳統的廣域網(WAN)并不總能適應這些挑戰,因為它們往往無法提供…

不停的挖掘硬盤的最大潛能

從 NAS 上退休的硬盤被用在了監控的存儲上了。 隨著硬盤使用壽命的接近尾聲,感覺就是從高附加值數據到低附加值數據上。監控數據只會保留那么幾個月的時間,很多時候都會被覆蓋重新寫入。 有人問為什么監控數據不保留幾年的,那是因為監控數據…

java_函數式接口

文章目錄 一、什么是函數式接口二、四大核心函數式接口三、使用舉例 一、什么是函數式接口 如果一個接口只有一個抽象方法,那么該接口就是一個函數式接口函數式接口的實例可以通過 lambda 表達式、方法引用或者構造方法引用來創建如果我們在某個接口上聲明了 Funct…

【Unity入門】鼠標輸入和鍵盤輸入

Unity的Input類提供了許多監聽用戶輸入的方法,比如我們常見的鼠標,鍵盤,手柄等。我們可以用Input類的接口來獲取用戶的輸入信息 一、監聽鼠標輸入 GetMouseButtonUp 、GetMouseButtonDown、GetMouseButton input.GetMouseButtonDown和 inp…

從mysql源碼編譯出相應的庫和可執行文件及搭建mysql服務端

目錄 1. 問題的提出 2. 源碼下載 3. 升級或安裝某些前置軟件 3.1. 升級CMake 3.2. 升級gcc、g 4. 安裝依賴庫 4.1. 安裝OpenSSL 4.2. 安裝Curses 4.3. 安裝pkg-config 5. 編譯、安裝 6. 編譯結果、配置 7. 編譯錯誤處理 7.1. 錯誤1 7.2. 錯誤2 8. 搭建mysql數…

VMware三種網絡模式

橋接模式 NAT(網絡地址轉換模式) Host-Only(僅主機模式) 參考: vmware虛擬機三種網絡模式 - 知乎 (zhihu.com)

【中國平安社招校招】【內推】【當天內推】

中國平安社招校招內推 通過內推鏈接即時內推,反饋速度比正常要快(可私信問進度) 開放大量HC(不限崗位和地區,技術、設計、產品、運營、數據等都可內推) Step1:查看相關職位 瀏覽平安的招聘官網:復制以下地址至瀏覽器打開。注意以下鏈接包含…

一篇文章搞懂WPF動畫的使用技巧

WPF 動畫系統提供了豐富的功能,用于為 UI 元素創建流暢的動態效果。動畫可以應用于任何可用于渲染的屬性,比如位置、顏色、大小等。在 WPF 中,動畫是通過更改隨時間變化的屬性來實現的。 WPF動畫基本用法 例如實現如下的動畫效果&#xff1…

合并區間問題

以數組 intervals 表示若干個區間的集合,其中單個區間為 intervals[i] [starti, endi] 。請你合并所有重疊的區間,并返回 一個不重疊的區間數組,該數組需恰好覆蓋輸入中的所有區間 。 示例 1: 輸入:intervals [[1,…

Java如何獲取泛型類型

泛型(Generic) 泛型允許程序員在強類型程序設計語言中編寫代碼時使用一些以后才指定的類型,在實例化時作為參數指明這些類型。各種程序設計語言和其編譯器、運行環境對泛型的支持均不一樣。Ada、Delphi、Eiffel、Java、C#、F#、Swift 和 Vis…

WPF樹形控件TreeView使用介紹

WPF 中的 TreeView 控件用于顯示層次結構數據。它是由可展開和可折疊的 TreeViewItem 節點組成的&#xff0c;這些節點可以無限嵌套以表示數據的層次。 TreeView 基本用法 例如實現下圖的效果&#xff1a; xaml代碼如下&#xff1a; <Window x:Class"TreeView01.Mai…

springcloud整合seata我踩過的坑

版本問題 seata 1.5和1.5之前的目錄結構不同,使用docker修改的配置文件也不同 1.4的左右 1.5之后docker 掛載文件也不同 1.5之前是使用自己寫的掛載registry docker run -d -p 8091:8091 -p 7091:7091 --network newlead --name seata-serve -e SEATA_IP192.168.249.132…

4:kotlin 方法(Functions)

想要聲明一個函數需要使用fun關鍵字 fun hello() {return println("Hello, world!") }fun main() {hello()// Hello, world! }格式: fun 方法名(參數1: 參數1類型, 參數2 : 參數2類型, ...): 返回值類型 {方法體return 返回值 }fun 方法名(參數1: 參數1類型, 參數2…

人工智能基礎_機器學習047_用邏輯回歸實現二分類以上的多分類_手寫代碼實現邏輯回歸OVR概率計算---人工智能工作筆記0087

然后我們再來看一下如何我們自己使用代碼實現邏輯回歸的,對二分類以上,比如三分類的概率計算 我們還是使用鶯尾花數據 首先我們把公式寫出來 def sigmoid(z): 定義出來這個函數 可以看看到這需要我們理解OVR是如何進行多分類的,我們先來看這個 OVR分類器 思想 OVR(One-vs-…

UE 進階篇一:動畫系統

導語: 下面的動畫部分功能比較全,可以參考這種實現方式,根據自己項目的顆粒度選擇部分功能參考,我們商業項目動畫部分也是這么實現的。 最后實現的效果如下: 最終效果 目錄: ------------------------------------------- 文末有視頻教程/工程地址鏈接 -------------…

9、鴻蒙應用桌面圖標外觀和國際化

一、項目資源目錄 項目下的resoueces目錄為資源配置目錄&#xff0c;其中base為基礎配置&#xff0c;即在任何語言環境下都會加載的資源&#xff0c; color.json&#xff1a;用于配置顏色&#xff0c;如頁面的背景和文字的顏色。 string.json&#xff1a;用于設置文字&#…

Selenium切換窗口、框架和彈出框window、ifame、alert

一、切換窗口 #獲取打開的多個窗口句柄 windows driver.window_handles #切換到當前最新打開的窗口 driver.switch_to.window(windows[-1]) #最大化瀏覽器 driver.maximize_window() #刷新當前頁面 driver.refresh() 二、切換框架frame 如存在以下網頁&#xff1a; <htm…

Java基礎(程序控制結構篇)

Java的程序控制結構與C語言一致&#xff0c;分為順序結構、選擇結構&#xff08;分支結構&#xff09;和循環結構三種。 一、順序結構 如果程序不包含選擇結構或是循環結構&#xff0c;那么程序中的語句就是順序的逐條執行&#xff0c;這就是順序結構。 import java.util.Sc…

【 OpenGauss源碼學習 —— 列存儲(CStoreMemAlloc)】

列存儲&#xff08;CStoreMemAlloc&#xff09; 概述CStoreMemAlloc 類CStoreMemAlloc::Palloc 函數CStoreMemAlloc::AllocPointerNode 函數CStoreMemAlloc::FreePointerNode 函數CStoreMemAlloc::Repalloc 函數CStoreMemAlloc::PfreeCStoreMemAlloc::Register 函數CStoreMemAl…

杭電oj 2064 漢諾塔III C語言

#include <stdio.h>void main() {int n, i;long long sum[35] { 2,8,26 };for (i 3; i < 35; i)sum[i] 3 * sum[i - 1] 2;while (~scanf_s("%d", &n))printf("%lld\n", sum[n - 1]); }