這或許是史上功能最全的Java權(quán)限認證框架

今天給大家推薦一個或許是史上功能最全最強的Java權(quán)限認證框架,并且是開源的。


sa-token.png

這個開源項目就是:sa-token。

Sa-Token是什么?

sa-token是一個輕量級Java權(quán)限認證框架,主要解決:登錄認證、權(quán)限認證、Session會話、單點登錄、OAuth2.0 等一系列權(quán)限相關(guān)問題

框架針對踢人下線、自動續(xù)簽、前后臺分離、分布式會話……等常見業(yè)務(wù)進行N多適配,通過sa-token,你可以以一種極簡的方式實現(xiàn)系統(tǒng)的權(quán)限認證部分

與其它權(quá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)限認證問題,都不再是問題!

Sa-Token 能做什么?

  • 登錄驗證 —— 輕松登錄鑒權(quán),并提供五種細分場景值
  • 權(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一樣手機電腦同時在線,但是兩個手機上互斥登錄
  • 多賬號認證體系 —— 比如一個商城項目的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ù)簽
  • 會話治理 —— 提供方便靈活的會話查詢接口
  • 記住我模式 —— 適配[記住我]模式,重啟瀏覽器免驗證
  • 密碼加密 —— 提供密碼加密模塊,可快速MD5、SHA1、SHA256、AES、RSA加密
  • 組件自動注入 —— 零配置與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呢?全局過濾器呢?我不用寫各種配置文件嗎?

事實上在此我可以負責(zé)的告訴你,在sa-token中,登錄授權(quán)就是如此的簡單,不需要什么全局過濾器,不需要各種亂七八糟的配置!只需要這一行簡單的API調(diào)用,即可完成會話的登錄授權(quán)!

當(dāng)你受夠Shiro、Security等框架的三拜九叩之后,你就會明白,相對于這些傳統(tǒng)老牌框架,sa-token的API設(shè)計是多么的清爽!

權(quán)限認證示例 (只有具有user:add權(quá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)識進行強制注銷 (不同端不受影響)
StpUtil.switchTo(10044);                  // 將當(dāng)前會話身份臨時切換為其它賬號

迭代模式

sa-token的功能提案主要來源于社區(qū),這意味著人人都可以參與到sa-token的功能定制,決定框架的未來走向, 如果你有好的想法,可以在issues提出或者加入群一起交流,對于社區(qū)的提出的功能要求,主要分為以下幾類:

  • 對框架新增特性功能且比較簡單,會在第一時間進行開發(fā)
  • 對框架新增特性功能但比較復(fù)雜,會延后幾個版本制定相應(yīng)的計劃后進行開發(fā)
  • 與框架設(shè)計理念不太相符,或超出權(quán)限認證范疇,將會視需求人數(shù)決定是否開發(fā)

參與貢獻

眾人拾柴火焰高,萬丈高樓眾人起! sa-token秉承著開放的思想,歡迎大家貢獻代碼,為框架添磚加瓦,對框架有卓越貢獻者將會出現(xiàn)在貢獻者名單里

  1. 在gitee或者github上fork一份代碼到自己的倉庫
  2. clone自己的倉庫到本地電腦
  3. 在本地電腦修改、commit、push
  4. 提交pr(點擊:New Pull Request)
  5. 等待合并

作者寄語:參與貢獻不光只有提交代碼一個選擇,點一個star、提一個issues都是對開源項目的促進, 如果框架幫助到了你,歡迎你把框架推薦給你的朋友、同事使用,為sa-token的推廣做一份貢獻

建議貢獻的地方

目前框架的主要有以下部分需要大家一起參與貢獻:

  • 核心代碼:該部分需要開發(fā)者了解整個框架的架構(gòu),遵循已有代碼規(guī)范進行bug修復(fù)或提交新功能
  • 文檔部分:需要以清晰明了的語句書寫文檔,力求簡單易讀,授人以魚同時更授人以漁
  • 社區(qū)建設(shè):如果框架幫助到了您,希望您可以加入qq群參與交流,對不熟悉框架的新人進行排難解惑
  • 框架推廣:一個優(yōu)秀的開源項目不能僅靠閉門造車,它還需要一定的推廣方案讓更多的人一起參與到項目中
  • 其它部分:您可以參考項目issues與需求墻進行貢獻
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容