shiro太複雜?快來試試這個輕量級權限認證框架!

前言

在java的世界裏,有不少優秀的權限認證框架,如Apache ShiroSpring Security 等等。這些框架背景強大,歷史悠久,其生態也比較齊全。java

但同時這些框架也並不是十分完美,在先後臺分離已成標配的互聯網時代,這些老牌框架的不少設計理念已經至關滯後,沒法與咱們的項目完美契合。git

而今天我要介紹的這款框架,專門爲先後臺分離架構而生, 功能強大, 上手簡單 —— sa-token。github

Sa-Token是什麼?

sa-token是一個輕量級Java權限認證框架,主要解決:登陸認證、權限認證、Session會話、單點登陸、OAuth2.0 等一系列權限相關問題小程序

框架針對踢人下線、自動續簽、先後臺分離、分佈式會話……等常見業務進行N多適配,經過sa-token,你能夠以一種極簡的方式實現系統的權限認證部分瀏覽器

與其它權限認證框架相比,sa-token 具備如下優點:緩存

  1. 簡單 :可零配置啓動框架,真正的開箱即用,低成本上手
  2. 強大 :目前已集成幾十項權限相關特性,涵蓋了大部分業務場景的解決方案
  3. 易用 :如絲般順滑的API調用,大量高級特性通通只需一行代碼便可實現
  4. 高擴展 :幾乎全部組件都提供了擴展接口,90%以上的邏輯均可以按需重寫

有了sa-token,你全部的權限認證問題,都再也不是問題!restful

Sa-Token 能作什麼?

  • 登陸驗證 —— 輕鬆登陸鑑權,並提供五種細分場景值
  • 權限驗證 —— 適配RBAC權限模型,不一樣角色不一樣受權
  • Session會話 —— 專業的數據緩存中心
  • 踢人下線 —— 將違規用戶馬上清退下線
  • 持久層擴展 —— 可集成Redis、Memcached等專業緩存中間件,重啓數據不丟失
  • 分佈式會話 —— 提供jwt集成和共享數據中心兩種分佈式會話方案
  • 單點登陸 —— 一處登陸,到處通行
  • 模擬他人帳號 —— 實時操做任意用戶狀態數據
  • 臨時身份切換 —— 將會話身份臨時切換爲其它帳號
  • 無Cookie模式 —— APP、小程序等先後臺分離場景
  • 同端互斥登陸 —— 像QQ同樣手機電腦同時在線,可是兩個手機上互斥登陸
  • 多帳號認證體系 —— 好比一個商城項目的user表和admin表分開鑑權
  • 花式token生成 —— 內置六種token風格,還可自定義token生成策略
  • 註解式鑑權 —— 優雅的將鑑權與業務代碼分離
  • 路由攔截式鑑權 —— 根據路由攔截鑑權,可適配restful模式
  • 自動續簽 —— 提供兩種token過時策略,靈活搭配使用,還可自動續簽
  • 會話治理 —— 提供方便靈活的會話查詢接口
  • 記住我模式 —— 適配[記住我]模式,重啓瀏覽器免驗證
  • 密碼加密 —— 提供密碼加密模塊,可快速MD五、SHA一、SHA25六、AES、RSA加密
  • 組件自動注入 —— 零配置與Spring等框架集成
  • 更多功能正在集成中... —— 若有您有好想法或者建議,歡迎加羣交流

代碼示例

sa-token的API調用很是簡單,有多簡單呢?以登陸驗證爲例,你只須要:架構

// 在登陸時寫入當前會話的帳號id
StpUtil.setLoginId(10001);

// 而後在任意須要校驗登陸處調用如下API
// 若是當前會話未登陸,這句代碼會拋出 `NotLoginException`異常
StpUtil.checkLogin();

至此,咱們已經藉助sa-token框架完成登陸受權!app

此時的你小腦殼可能飄滿了問號,就這麼簡單?自定義Realm呢?全局過濾器呢?我不用寫各類配置文件嗎?框架

事實上在此我能夠負責的告訴你,在sa-token中,登陸受權就是如此的簡單,不須要什麼全局過濾器,不須要各類亂七八糟的配置!只須要這一行簡單的API調用,便可完成會話的登陸受權!

當你受夠Shiro、Security等框架的三拜九叩以後,你就會明白,相對於這些傳統老牌框架,sa-token的API設計是多麼的清爽!

權限認證示例 (只有具備user:add權限的會話才能夠進入請求)

@SaCheckPermission("user:add")
@RequestMapping("/user/insert")
public String insert(SysUser user) {
    // ... 
    return "用戶增長";
}

將某個帳號踢下線 (待到對方再次訪問系統時會拋出NotLoginException異常)

// 使帳號id爲10001的會話註銷登陸
StpUtil.logoutByLoginId(10001);

除了以上的示例,sa-token還能夠一行代碼完成如下功能:

StpUtil.setLoginId(10001);                // 標記當前會話登陸的帳號id
StpUtil.getLoginId();                     // 獲取當前會話登陸的帳號id
StpUtil.isLogin();                        // 獲取當前會話是否已經登陸, 返回true或false
StpUtil.logout();                         // 當前會話註銷登陸
StpUtil.logoutByLoginId(10001);           // 讓帳號爲10001的會話註銷登陸(踢人下線)
StpUtil.hasRole("super-admin");           // 查詢當前帳號是否含有指定角色標識, 返回true或false
StpUtil.hasPermission("user:add");        // 查詢當前帳號是否含有指定權限, 返回true或false
StpUtil.getSession();                     // 獲取當前帳號id的Session
StpUtil.getSessionByLoginId(10001);       // 獲取帳號id爲10001的Session
StpUtil.getTokenValueByLoginId(10001);    // 獲取帳號id爲10001的token令牌值
StpUtil.setLoginId(10001, "PC");          // 指定設備標識登陸
StpUtil.logoutByLoginId(10001, "PC");     // 指定設備標識進行強制註銷 (不一樣端不受影響)
StpUtil.switchTo(10044);                  // 將當前會話身份臨時切換爲其它帳號

sa-token的API衆多,請恕此處沒法爲您逐一展現,更多示例請戳官方在線文檔

最後附上項目連接:

相關文章
相關標籤/搜索