目錄
- 前言
- 引入項目
- 開啟登錄認證
- 路由攔截鑒權
- 解決兼容問題
- 總結
前言
之前無意中發現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包和對應的源碼。
- 我在項目中引入的是:
implementation("cn.dev33:sa-token-spring-boot-starter:1.37.0")
- 然后這個包間接引入了三個包
- 可以看到其中
cn.dev33:sa-token-spring-boot-starter
和cn.dev33:sa-token-spring-boot-autoconfig
明顯是和SpringBoot集成相關的。 于是打開兩個包查看源碼。 - 發現
cn.dev33:sa-token-spring-boot-starter
是和javax.servlet
相關的, 并且其中的類比較少和簡單。 于是我把其中的類全部復制到我的項目的com.github.blanexie.vxph.common.satoken
包路徑中,并且把其中的javax.servlet
包名全部換成jakarta.servlet
包名。 - 要注意官方包是通過
spring.factories
文件的方式把SaTokenContextRegister
類引入到Spring的容器中來完成集成的。 因此復制了后,需要我們手動把這個類加入到容器中, 很簡單直接在這個類上面加上@Configuration
注解
- 刪除
cn.dev33:sa-token-spring-boot-starter
包的引入, 注意SaToken的其他核心包是通過這個包間接引入的,所以我們還需要手動引入其他包。 - 至此整個整合動作完成,啟動項目,訪問相關接口, 生效OK
總結
Java21已經發布了, 并且包含激動人心的虛擬線程功能, 要跟上時代的腳步。
本文章解決的問題就是 Java17相關包名稱修改導致的問題, 需要的了解相關SpringBoot
的starter
模塊的知識。 需要了解Gradle/Maven
包依賴引入的關系知識等。
其實只要知道根本底層原理,很多問題都有解決方案的。
下篇文章講解如何設計權限角色表, 并且配合SaToken來實現權限控制的動態改變。