dromara /Sa-Token
✨ 开源、免费、一站式 Java 权限认证框架,让鉴权变得简单、优雅!—— 登录认证、权限认证、分布式 Session 会话、微服务网关鉴权、SSO 单点登录、OAuth2.0 统一认证、jwt 集成、API Key 秘钥授权、API 参数签名
★ 19,114⑂ 2,912
19,114
stars
+7+5+44
2,912
forks
–
watchers
–
prs
–
issues
–
releases
–
discussions
README
简体中文 | 繁體中文 | English | 日本語 | 한국어 | Русский
Sa-Token v1.46.0
✨ 開源、免費、一站式 java 權限認證框架,讓鑑權變得簡單、優雅!
--
--
學習測試請拉取 master 分支,dev 是在開發分支 (在根目錄執行 git checkout master) --
在線文檔:https://sa-token.com
|
需求提交
---
📝 前言:
回望 2020 年初,我為 Sa-Token 提交第一行代碼之際,彼時市面上 Java 缺少的不僅是一個簡潔好用的鑑權框架,更是一整套清晰、自洽的權限架構設計思想。
因此,這幾年間我將大量時間傾注在 Sa-Token 的文檔編寫,幾乎每一章節、每一句話、每一個字都經過反覆修改、精細打磨,以求做到最清晰、幹練、易懂的表述。用心閱讀文檔,你學習到的將不止是 Sa-Token 框架本身,更是絕大多數場景下權限認證設計的最佳實踐。
🛠️ Sa-Token 介紹
Sa-Token 是一個輕量級 Java 權限認證框架,目前擁有五大核心模塊:登錄認證、權限認證、單點登錄、OAuth2.0、微服務鑑權。
你還在手搓以下功能?Stop,讓 Sa-Token 來!
!sa-token-jss
要在 SpringBoot 項目中使用 Sa-Token,你只需要在 pom.xml 中引入依賴:
xml
cn.dev33
sa-token-spring-boot-starter
1.46.0
除了支持 SpringBoot2、Sa-Token 還為 SpringBoot3/4、Solon、JFinal 等常見 Web 框架提供集成包,做到真正的開箱即用。
簡單示例展示:(點擊展開 / 摺疊)
Sa-Token 旨在以簡單、優雅的方式完成系統的權限認證部分,以登錄認證為例,你只需要:
java
// 會話登錄,參數填登錄人的賬號id
StpUtil.login(10001);
無需實現任何接口,無需創建任何配置文件,只需要這一句靜態代碼的調用,便可以完成會話登錄認證。
如果一個接口需要登錄後才能訪問,我們只需調用以下代碼:
java
// 校驗當前客戶端是否已經登錄,如果未登錄則拋出 NotLoginException 異常
StpUtil.checkLogin();
在 Sa-Token 中,大多數功能都可以一行代碼解決:
踢人下線:
java
// 將賬號id為 10077 的會話踢下線
StpUtil.kickout(10077);
權限認證:
java
// 註解鑑權:只有具備 user:add 權限的會話才可以進入方法
@SaCheckPermission("user:add")
public String insert(SysUser user) {
// ...
return "用戶增加";
}
路由攔截鑑權:
java
// 根據路由劃分模塊,不同模塊不同鑑權
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 後,您將體會到質的飛躍。
核心模塊一覽:(點擊展開 / 摺疊)
- 登錄認證 —— 單端登錄、多端登錄、同端互斥登錄、七天內免登錄。
- 權限認證 —— 權限認證、角色認證、會話二級認證。
- 踢人下線 —— 根據賬號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快速登錄認證 —— 為項目零代碼注入一個登錄頁面。
- 標籤方言 —— 提供 Thymele