再見 Shiro、Spring Security!權(quán)限認(rèn)證我選擇它
哈嘍,大家好,我是了不起。
Java有很多優(yōu)秀的權(quán)限認(rèn)證框架,如Apache Shiro、Spring Security等,但是集成起來實(shí)在是有些復(fù)雜;今天給大家介紹一個輕量級的權(quán)限認(rèn)證框架:Sa-Token,只需引入依賴即可使用,接下來讓我們進(jìn)一步了解它。
初識sa-token
Sa-Token 是一個輕量級 Java 權(quán)限認(rèn)證框架,旨在以簡單、優(yōu)雅的方式完成系統(tǒng)的權(quán)限認(rèn)證部分,主要解決:登錄認(rèn)證、權(quán)限認(rèn)證、單點(diǎn)登錄、OAuth2.0、分布式Session會話、微服務(wù)網(wǎng)關(guān)鑒權(quán) 等一系列權(quán)限相關(guān)問題。
sa-token
Sa-Token 功能
Sa-Token 目前主要五大功能模塊:登錄認(rèn)證、權(quán)限認(rèn)證、單點(diǎn)登錄、OAuth2.0、微服務(wù)鑒權(quán)。
- 登錄認(rèn)證 —— 單端登錄、多端登錄、同端互斥登錄、七天內(nèi)免登錄
- 權(quán)限認(rèn)證 —— 權(quán)限認(rèn)證、角色認(rèn)證、會話二級認(rèn)證
- Session會話 —— 全端共享Session、單端獨(dú)享Session、自定義Session
- 踢人下線 —— 根據(jù)賬號id踢人下線、根據(jù)Token值踢人下線
- 賬號封禁 —— 登錄封禁、按照業(yè)務(wù)分類封禁、按照處罰階梯封禁
- 持久層擴(kuò)展 —— 可集成Redis、Memcached等專業(yè)緩存中間件,重啟數(shù)據(jù)不丟失
- 分布式會話 —— 提供jwt集成、共享數(shù)據(jù)中心兩種分布式會話方案
- 微服務(wù)網(wǎng)關(guān)鑒權(quán) —— 適配Gateway、ShenYu、Zuul等常見網(wǎng)關(guān)的路由攔截認(rèn)證
- 單點(diǎn)登錄 —— 內(nèi)置三種單點(diǎn)登錄模式:無論是否跨域、是否共享Redis,都可以搞定
- OAuth2.0認(rèn)證 —— 輕松搭建 OAuth2.0 服務(wù),支持openid模式
- 二級認(rèn)證 —— 在已登錄的基礎(chǔ)上再次認(rèn)證,保證安全性
- Basic認(rèn)證 —— 一行代碼接入 Http Basic 認(rèn)證
- 獨(dú)立Redis —— 將權(quán)限緩存與業(yè)務(wù)緩存分離
- 臨時Token認(rèn)證 —— 解決短時間的Token授權(quán)問題
- 模擬他人賬號 —— 實(shí)時操作任意用戶狀態(tài)數(shù)據(jù)
- 臨時身份切換 —— 將會話身份臨時切換為其它賬號
- 前后端分離 —— APP、小程序等不支持Cookie的終端
- 同端互斥登錄 —— 像QQ一樣手機(jī)電腦同時在線,但是兩個手機(jī)上互斥登錄
- 多賬號認(rèn)證體系 —— 比如一個商城項(xiàng)目的user表和admin表分開鑒權(quán)
- Token風(fēng)格定制 —— 內(nèi)置六種Token風(fēng)格,還可:自定義Token生成策略、自定義Token前綴
- 注解式鑒權(quán) —— 優(yōu)雅的將鑒權(quán)與業(yè)務(wù)代碼分離
- 路由攔截式鑒權(quán) —— 根據(jù)路由攔截鑒權(quán),可適配restful模式
- 自動續(xù)簽 —— 提供兩種Token過期策略,靈活搭配使用,還可自動續(xù)簽
- 會話治理 —— 提供方便靈活的會話查詢接口
- 記住我模式 —— 適配[記住我]模式,重啟瀏覽器免驗(yàn)證
- 密碼加密 —— 提供密碼加密模塊,可快速M(fèi)D5、SHA1、SHA256、AES、RSA加密
- 全局偵聽器 —— 在用戶登陸、注銷、被踢下線等關(guān)鍵性操作時進(jìn)行一些AOP操作
- 開箱即用 —— 提供SpringMVC、WebFlux等常見web框架starter集成包,真正的開箱即用
簡單示例
1、引入依賴
注:如果你使用的是 SpringBoot 3.x,只需要將 sa-token-spring-boot-starter 修改為 sa-token-spring-boot3-starter 即可。
<!-- Sa-Token 權(quán)限認(rèn)證,1.34.0 已是最新版本 -->
<dependency>
<groupId>cn.dev33</groupId>
<artifactId>sa-token-spring-boot-starter</artifactId>
<version>1.34.0</version>
</dependency>
yaml配置
server:
# 端口
port: 8081
sa-token:
# token名稱 (同時也是cookie名稱)
token-name: satoken
# 用 sa-token 默認(rèn)的配置即可,也可根據(jù)業(yè)務(wù)自行修改
2、編寫測試代碼
@RestController
@RequestMapping("/user/")
public class UserController {
@RequestMapping("doLogin")
public String doLogin(String username, String password) {
if("zhang".equals(username) && "123456".equals(password)) {
StpUtil.login(10001);
return "登錄成功";
}
return "登錄失敗";
}
@RequestMapping("isLogin")
public String isLogin() {
return "當(dāng)前會話是否登錄:" + StpUtil.isLogin();
}
}
3、測試
啟動代碼,從瀏覽器依次訪問上述測試接口
小結(jié)
看得出來,比起Shiro、SpringSecurity這些被廣泛使用的鑒權(quán)項(xiàng)目,這個項(xiàng)目的集成使用方式可以簡單到令人發(fā)指。
今天就介紹到這里了,感興趣的小伙伴們可以去看官方文檔,進(jìn)一步了解它。
Sa-Token 官方文檔
https://sa-token.cc/doc.html