Sa-Token v1.39.0
一個輕量級Java 權限認證框架,讓鑑權變得簡單、優雅!
線上文件:https://sa-token.cc
Sa-Token 介紹
Sa-Token 是一個輕量級Java 權限認證框架,目前擁有五大核心模組:登入認證、權限認證、單一登入、OAuth2.0、微服務鑑權。
簡單範例展示:(點擊展開/ 折疊)
Sa-Token 旨在以簡單、優雅的方式完成系統的權限認證部分,以登入認證為例,你只需要:
// 会话登录,参数填登录人的账号id
StpUtil . login ( 10001 );
無需實作任何接口,無需建立任何設定文件,只需要這一句靜態程式碼的調用,便可以完成會話登入認證。
如果一個介面需要登入後才能訪問,我們只需呼叫以下程式碼:
// 校验当前客户端是否已经登录,如果未登录则抛出 `NotLoginException` 异常
StpUtil . checkLogin ();
在Sa-Token 中,大多數功能都可以一行程式碼解決:
踢人下線:
// 将账号id为 10077 的会话踢下线
StpUtil . kickout ( 10077 );
權限認證:
// 注解鉴权:只有具备 `user:add` 权限的会话才可以进入方法
@ SaCheckPermission ( "user:add" )
public String insert ( SysUser user ) {
// ...
return "用户增加" ;
}
路由攔截鑑權:
StpUtil.checkPermission("user"));
SaRouter.match("/admin/**", r -> StpUtil.checkPermission("admin"));
SaRouter.match("/goods/**", r -> StpUtil.checkPermission("goods"));
SaRouter.match("/orders/**", r -> StpUtil.checkPermission("orders"));
SaRouter.match("/notice/**", r -> StpUtil.checkPermission("notice"));
// 更多模块...
})).addPathPatterns("/**");">
// 根据路由划分模块,不同模块不同鉴权
registry . addInterceptor ( new SaInterceptor ( handler -> {
SaRouter . match ( "/user/**" , r -> StpUtil . checkPermission ( "user" ));
SaRouter . match ( "/admin/**" , r -> StpUtil . checkPermission ( "admin" ));
SaRouter . match ( "/goods/**" , r -> StpUtil . checkPermission ( "goods" ));
SaRouter . match ( "/orders/**" , r -> StpUtil . checkPermission ( "orders" ));
SaRouter . match ( "/notice/**" , r -> StpUtil . checkPermission ( "notice" ));
// 更多模块...
})). addPathPatterns ( "/**" );
當你受夠Shiro、SpringSecurity 等框架的三拜九叩之後,你就會明白,相對於這些傳統老牌框架,Sa-Token 的API 設計是多麼的簡單、優雅!
核心模組一覽:(點擊展開/ 折疊)
- 登入認證- 單一登入、多端登入、同端互斥登入、七天內免登入。
- 權限認證- 權限認證、角色認證、會話二級認證。
- 踢人下線- 依照帳號id踢人下線、依照Token值踢人下線。
- 註解式鑑權—— 優雅的將鑑權與業務程式碼分開。
- 路由攔截式鑑權- 依路由攔截鑑權,可適配restful 模式。
- Session會話- 全端共享Session,單端獨享Session,自訂Session,方便的存取值。
- 持久層擴充—— 可整合Redis,重啟資料不遺失。
- 前後台分離- APP、小程式等不支援Cookie 的終端也可以輕鬆辨識。
- Token風格客製化- 內建六種Token 風格,還可:自訂Token 生成策略。
- 記住我模式— 適配[記住我] 模式,重啟瀏覽器免驗證。
- 二級認證- 在已登入的基礎上再次認證,確保安全性。
- 模擬他人帳號- 即時操作任意使用者狀態資料。
- 臨時身分切換- 將會話身分暫時切換為其它帳號。
- 同端互斥登入- 像QQ一樣手機電腦同時在線,但是兩個手機上互斥登入。
- 帳號封鎖- 登入封鎖、依業務分類封鎖、依照處罰階梯封鎖。
- 密碼加密- 提供基礎加密演算法,可快速MD5、SHA1、SHA256、AES 加密。
- 會話查詢- 提供方便且靈活的會話查詢介面。
- Http Basic認證- 一行程式碼接取Http Basic、Digest 認證。
- 全域偵聽器- 在使用者登陸、登出、被踢下線等關鍵性作業時進行一些AOP操作。
- 全域過濾器- 方便的處理跨域,全域設定安全回應頭等操作。
- 多帳號體系認證- 一個系統多套帳號分開鑑權(例如商城的User 表和Admin 表)
- 單一登入- 內建三種單一登入模式:同域、跨網域、同Redis、跨Redis、前後端分離等架構都可以搞定。
- 單點註銷- 任意子系統內發起註銷,即可全端下線。
- OAuth2.0認證- 輕鬆搭建OAuth2.0 服務,支援openid模式。
- 分散式會話—— 提供共享資料中心分散式會話方案。
- 微服務閘道器鑑權- 適配Gateway、ShenYu、Zuul等常見閘道器的路由攔截認證。
- RPC呼叫鑑權- 閘道轉送鑑權,RPC呼叫鑑權,讓服務呼叫不再裸奔
- 臨時Token認證- 解決短時間的Token 授權問題。
- 獨立Redis —— 將權限快取與業務快取分開。
- Quick快速登入認證- 為專案零程式碼注入一個登入頁面。
- 標籤方言- 提供Thymeleaf 標籤方言整合包,提供beetl 整合範例。
- jwt整合- 提供三種模式的jwt 整合方案,提供token 擴充參數能力。
- RPC呼叫狀態傳遞- 提供dubbo、grpc 等整合包,在RPC呼叫時登入狀態不遺失。
- 參數簽章- 提供跨系統API呼叫簽章校驗模組,防參數竄改,防請求重播。
- 自動續約- 提供兩種Token過期策略,靈活搭配使用,還可自動續約。
- 開箱即用- 提供SpringMVC、WebFlux、Solon 等常見框架整合包,開箱即用。
- 最新技術堆疊- 適配最新技術棧:支援SpringBoot 3.x,jdk 17。
SSO 單一登入
Sa-Token SSO 分為三種模式,解決同域、跨域、共享Redis、跨Redis、前後端一體、前後端分離…等不同架構下的SSO 存取問題:
系統架構 | 採用模式 | 簡介 | 文件連結 |
---|
前端同域+ 後端同Redis | 模式一 | 共用Cookie同步會話 | 文件、範例 |
前端不同域+ 後端同Redis | 模式二 | URL重定向傳播會話 | 文件、範例 |
前端不同域+ 後端不同Redis | 模式三 | Http請求獲取會話 | 文件、範例 |
- 前端同域:就是指多個系統可以部署在同一個主網域之下,例如:
c1.domain.com
、 c2.domain.com
、 c3.domain.com
- 後端同Redis:就是指多個系統可以連接同一個Redis。 (此處並非要所有專案資料都放在一個Redis中,Sa-Token提供
[权限缓存与业务缓存分离]
的解決方案) - 如果既無法做到前端同域,也無法做到後端同Redis,可以走模式三,Http請求校驗ticket 取得會話。
- 提供NoSdk 模式範例,不使用Sa-Token 的系統也可以對接。
- 提供sso-server 介面文檔,不使用java 語言的系統也可以對接。
- 提供前後端分離整合方案:無論是sso-server 或sso-client 的前後端分離都可以整合。
- 提供安全校驗:網域校驗、ticket校驗、參數簽章校驗,有效防ticket 劫持,防請求重播等攻擊。
- 參數防丟:筆者曾試驗多個SSO框架,均有參數遺失狀況,例如登入前是:
http://a.com?id=1&name=2
,登入成功後就變成了: http://a.com?id=1
,Sa-Token-SSO 內有專門演算法保證了參數不遺失,登入成功後精準原路返回。 - 提供用戶資料同步/遷移方案的建議:開發前統一遷移、運行時即時資料同步、根據關聯欄位匹配、根據center_id 欄位匹配等。
- 提供直接可運行的demo 範例,幫助你快速熟悉SSO 大致登入流程。
OAuth2 授權認證
Sa-Token-OAuth2 模組分為四種授權模式,解決不同場景下的授權需求
授權模式 | 簡介 |
---|
授權碼(Authorization Code) | OAuth2.0 標準授權步驟,Server 端向Client 端下放Code 碼,Client 端再用Code 碼換取授權Token |
隱藏式(Implicit) | 無法使用授權碼模式時的備用選擇,Server 端使用URL 重定向方式直接將Token 下放到Client 端頁面 |
密碼式(Password) | Client直接拿著使用者的帳號密碼換取授權Token |
客戶端憑證(Client Credentials) | Server 端針對Client 層級的Token,代表應用自身的資源授權 |
詳細參考文件:https://sa-token.cc/doc.html#/oauth2/readme
開源整合案例
- [ Snowy ]:國內首個國密前後分離快速開發平台,採用Vue3 + AntDesignVue3 + Vite + SpringBoot + Mp + HuTool + SaToken。
- [ RuoYi-Vue-Plus ]:重寫RuoYi-Vue所有功能整合Sa-Token+Mybatis-Plus+Jackson+Xxl-Job+knife4j+Hutool+OSS 定期同步
- [Smart-Admin]:SmartAdmin國內首個以「高品質程式碼」為核心,「簡潔、有效率、安全」中後台快速開發平台;
- [ 燈燈]: 專注於多租戶解決方案的微服務中後台快速開發平台。租用戶模式支援獨立資料庫(DATASOURCE模式)、共享資料架構(COLUMN模式) 和非租用戶模式(NONE模式)
- [ EasyAdmin ]:一個基於SpringBoot2 + Sa-Token + Mybatis-Plus + Snakerflow + Layui 的後台管理系統,靈活多變可前後端分離,也可單體,內建程式碼產生器、權限管理、工作流引擎等
- [ sa-admin-server ]: 基於sa-admin-ui 的後台管理開發鷹架。
還有更多優秀開源案例無法逐一展示,請參考:Awesome-Sa-Token
友情連結
- [ OkHttps ]:輕量級http 通訊框架,API無比優雅,支援WebSocket、Stomp 協定
- [ Bean Searcher ]:專注進階查詢的唯讀ORM,使一行程式碼實現複雜清單檢索!
- [ Jpom ]:簡而輕的低侵入式線上建置、自動部署、日常維運、專案監控軟體。
- [ TLog ]:一個輕量級的分散式日誌標記追蹤神器。
- [ hippo4j ]:強大的動態執行緒池框架,附帶監控警報功能。
- [ hertzbeat ]:易用友善的開源即時監控警告系統,無需Agent,高效能集群,強大自訂監控能力。
- [ Solon ]:一個更現代感的應用開發框架:更快、更小、更自由。
- [ Chat2DB ]:一個AI驅動的資料庫管理與BI工具,支援Mysql、pg、Oracle、Redis等22種資料庫的管理。
程式碼託管
- Gitee:https://gitee.com/dromara/sa-token
- GitHub:https://github.com/dromara/sa-token
- GitCode:https://gitcode.com/dromara/sa-token
交流群
QQ交流群:823181187 點選加入
微信交流群:
(掃碼添加微信,備註:sa-token,邀請您加入群組聊天)
加入群組聊天的好處:
- 第一時間收到框架更新通知。
- 第一時間收到框架bug 通知。
- 第一時間收到新增開源案例通知。
- 和眾多大佬一起互相(huá shuǐ) 交流(mō yú)。