重磅推薦:很全的 Java 權(quán)限認(rèn)證框架!

來源:GitHub上sa-token 項目
今天給大家推薦的這個開源項目超級棒,可能是史上功能最全的 Java 權(quán)限認(rèn)證框架!

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

