重磅推薦:很全的 Java 權(quán)限認(rèn)證框架!
來(lái)源:GitHub上sa-token 項(xiàng)目
今天給大家推薦的這個(gè)開(kāi)源項(xiàng)目超級(jí)棒,可能是史上功能最全的 Java 權(quán)限認(rèn)證框架!

這個(gè)開(kāi)源項(xiàng)目就是:sa-token 。
Sa-Token是什么?
sa-token是一個(gè)輕量級(jí)Java權(quán)限認(rèn)證框架,主要解決:登錄認(rèn)證、權(quán)限認(rèn)證、Session會(huì)話、單點(diǎn)登錄、OAuth2.0 等一系列權(quán)限相關(guān)問(wèn)題
框架針對(duì)踢人下線、自動(dòng)續(xù)簽、前后臺(tái)分離、分布式會(huì)話……等常見(jiàn)業(yè)務(wù)進(jìn)行N多適配,通過(guò)sa-token,你可以以一種極簡(jiǎn)的方式實(shí)現(xiàn)系統(tǒng)的權(quán)限認(rèn)證部分
與其它權(quán)限認(rèn)證框架相比,sa-token 具有以下優(yōu)勢(shì):
簡(jiǎn)單 :可零配置啟動(dòng)框架,真正的開(kāi)箱即用,低成本上手 強(qiáng)大 :目前已集成幾十項(xiàng)權(quán)限相關(guān)特性,涵蓋了大部分業(yè)務(wù)場(chǎng)景的解決方案 易用 :如絲般順滑的API調(diào)用,大量高級(jí)特性統(tǒng)統(tǒng)只需一行代碼即可實(shí)現(xiàn) 高擴(kuò)展 :幾乎所有組件都提供了擴(kuò)展接口,90%以上的邏輯都可以按需重寫(xiě)
有了sa-token,你所有的權(quán)限認(rèn)證問(wèn)題,都不再是問(wèn)題!
Sa-Token 能做什么?
登錄驗(yàn)證 —— 輕松登錄鑒權(quán),并提供五種細(xì)分場(chǎng)景值 權(quán)限驗(yàn)證 —— 適配RBAC權(quán)限模型,不同角色不同授權(quán) Session會(huì)話 —— 專業(yè)的數(shù)據(jù)緩存中心 踢人下線 —— 將違規(guī)用戶立刻清退下線 持久層擴(kuò)展 —— 可集成Redis、Memcached等專業(yè)緩存中間件,重啟數(shù)據(jù)不丟失 分布式會(huì)話 —— 提供jwt集成和共享數(shù)據(jù)中心兩種分布式會(huì)話方案 單點(diǎn)登錄 —— 一處登錄,處處通行 模擬他人賬號(hào) —— 實(shí)時(shí)操作任意用戶狀態(tài)數(shù)據(jù) 臨時(shí)身份切換 —— 將會(huì)話身份臨時(shí)切換為其它賬號(hào) 無(wú)Cookie模式 —— APP、小程序等前后臺(tái)分離場(chǎng)景 同端互斥登錄 —— 像QQ一樣手機(jī)電腦同時(shí)在線,但是兩個(gè)手機(jī)上互斥登錄 多賬號(hào)認(rèn)證體系 —— 比如一個(gè)商城項(xiàng)目的user表和admin表分開(kāi)鑒權(quán) 花式token生成 —— 內(nèi)置六種token風(fēng)格,還可自定義token生成策略 注解式鑒權(quán) —— 優(yōu)雅的將鑒權(quán)與業(yè)務(wù)代碼分離 路由攔截式鑒權(quán) —— 根據(jù)路由攔截鑒權(quán),可適配restful模式 自動(dòng)續(xù)簽 —— 提供兩種token過(guò)期策略,靈活搭配使用,還可自動(dòng)續(xù)簽 會(huì)話治理 —— 提供方便靈活的會(huì)話查詢接口 組件自動(dòng)注入 —— 零配置與Spring等框架集成 更多功能正在集成中... —— 如有您有好想法或者建議,歡迎加群交流
代碼示例
sa-token的API調(diào)用非常簡(jiǎn)單,有多簡(jiǎn)單呢?以登錄驗(yàn)證為例,你只需要:
// 在登錄時(shí)寫(xiě)入當(dāng)前會(huì)話的賬號(hào)id
StpUtil.setLoginId(10001);
// 然后在任意需要校驗(yàn)登錄處調(diào)用以下API
// 如果當(dāng)前會(huì)話未登錄,這句代碼會(huì)拋出 `NotLoginException`異常
StpUtil.checkLogin();
至此,我們已經(jīng)借助sa-token框架完成登錄授權(quán)!
此時(shí)的你小腦袋可能飄滿了問(wèn)號(hào),就這么簡(jiǎn)單?自定義Realm呢?全局過(guò)濾器呢?我不用寫(xiě)各種配置文件嗎?
事實(shí)上在此我可以負(fù)責(zé)的告訴你,在sa-token中,登錄授權(quán)就是如此的簡(jiǎn)單,不需要什么全局過(guò)濾器,不需要各種亂七八糟的配置!只需要這一行簡(jiǎn)單的API調(diào)用,即可完成會(huì)話的登錄授權(quán)!
當(dāng)你受夠Shiro、Security等框架的三拜九叩之后,你就會(huì)明白,相對(duì)于這些傳統(tǒng)老牌框架,sa-token的API設(shè)計(jì)是多么的清爽!
權(quán)限認(rèn)證示例 (只有具有user:add權(quán)限的會(huì)話才可以進(jìn)入請(qǐng)求)
@SaCheckPermission("user:add")
@RequestMapping("/user/insert")
public String insert(SysUser user) {
return "用戶增加";
}
將某個(gè)賬號(hào)踢下線 (待到對(duì)方再次訪問(wèn)系統(tǒng)時(shí)會(huì)拋出NotLoginException異常)
// 使賬號(hào)id為10001的會(huì)話注銷登錄
StpUtil.logoutByLoginId(10001);
除了以上的示例,sa-token還可以一行代碼完成以下功能:
StpUtil.setLoginId(10001); // 標(biāo)記當(dāng)前會(huì)話登錄的賬號(hào)id
StpUtil.getLoginId(); // 獲取當(dāng)前會(huì)話登錄的賬號(hào)id
StpUtil.isLogin(); // 獲取當(dāng)前會(huì)話是否已經(jīng)登錄, 返回true或false
StpUtil.logout(); // 當(dāng)前會(huì)話注銷登錄
StpUtil.logoutByLoginId(10001); // 讓賬號(hào)為10001的會(huì)話注銷登錄(踢人下線)
StpUtil.hasRole("super-admin"); // 查詢當(dāng)前賬號(hào)是否含有指定角色標(biāo)識(shí), 返回true或false
StpUtil.hasPermission("user:add"); // 查詢當(dāng)前賬號(hào)是否含有指定權(quán)限, 返回true或false
StpUtil.getSession(); // 獲取當(dāng)前賬號(hào)id的Session
StpUtil.getSessionByLoginId(10001); // 獲取賬號(hào)id為10001的Session
StpUtil.getTokenValueByLoginId(10001); // 獲取賬號(hào)id為10001的token令牌值
StpUtil.setLoginId(10001, "PC"); // 指定設(shè)備標(biāo)識(shí)登錄
StpUtil.logoutByLoginId(10001, "PC"); // 指定設(shè)備標(biāo)識(shí)進(jìn)行強(qiáng)制注銷 (不同端不受影響)
StpUtil.switchTo(10044); // 將當(dāng)前會(huì)話身份臨時(shí)切換為其它賬號(hào)
開(kāi)源項(xiàng)目地址:https://github.com/click33/sa-token
我正在更新《10萬(wàn)字Springboot經(jīng)典學(xué)習(xí)筆記》中,點(diǎn)擊下面小卡片,進(jìn)入【Java開(kāi)發(fā)寶典】,回復(fù):筆記,即可免費(fèi)獲取。
點(diǎn)贊是最大的支持

