一、Sa-Token簡介
Sa-Token 是一個專注于權限認證的輕量級 Java 框架,旨在簡化登錄認證、權限控制等功能的實現。其核心功能包括:
- 登錄認證:通過 Token 機制管理用戶會話,支持單點登錄(SSO)。
- 權限認證:基于角色或權限碼的細粒度權限控制。
- 分布式會話:支持 Redis 集成,實現分布式環境下的會話共享。
- 安全防護:提供防偽造 Token、防路徑遍歷攻擊等安全機制。
- 微服務鑒權:適配網關服務,支持微服務架構下的統一鑒權。
與傳統框架(如 Shiro、Spring Security)相比,Sa-Token 的 API 設計更簡潔,例如通過StpUtil
一行代碼即可完成登錄或鑒權。
二、核心功能與使用場景
-
登錄認證
- 頒發 Token:用戶登錄后生成加密 Token,存儲于 Redis 并返回客戶端。
// 用戶ID綁定Token StpUtil.login(userId); String token = StpUtil.getTokenValue(); // 獲取Token字符串
- 驗證 Token:通過注解或代碼攔截請求,驗證 Token 有效性。
@SaCheckLogin // 需登錄才能訪問的接口 public String getUserProfile() { ... }
- 頒發 Token:用戶登錄后生成加密 Token,存儲于 Redis 并返回客戶端。
-
權限驗證
- 角色/權限校驗:通過注解限制接口訪問權限。
@SaCheckPermission("user:add") // 需具備“user:add”權限 public String addUser() { ... }
- 路由攔截:配置全局攔截規則,按路徑鑒權。
registry.addInterceptor(new SaInterceptor(handler -> {SaRouter.match("/admin/**", r -> StpUtil.checkRole("admin")); }));
- 角色/權限校驗:通過注解限制接口訪問權限。
-
單點登錄(SSO)與OAuth2.0
- 支持多系統間的統一登錄與授權流程,簡化第三方應用接入。
三、快速集成步驟
-
添加依賴(Maven示例)
<dependency><groupId>cn.dev33</groupId><artifactId>sa-token-spring-boot-starter</artifactId><version>1.40.0</version> <!-- 推薦最新版本 --> </dependency> <!-- 集成Redis(分布式會話支持) --> <dependency><groupId>cn.dev33</groupId><artifactId>sa-token-dao-redis-jackson</artifactId><version>1.40.0</version> </dependency>
-
配置文件(application.yml)
sa-token:token-name: satoken # Token名稱timeout: 2592000 # 有效期(默認30天)activity-timeout: -1 # 臨時有效期(無操作永不過期)is-concurrent: true # 允許同一賬號并發登錄token-style: uuid # Token生成風格is-log: false # 關閉日志輸出
-
自定義權限校驗邏輯
實現StpInterface
接口,加載用戶的角色和權限列表:@Component public class SaPermissionImpl implements StpInterface {@Overridepublic List<String> getPermissionList(Object userId, String loginType) {// 從數據庫或緩存查詢權限列表return Arrays.asList("user:add", "user:delete");}@Overridepublic List<String> getRoleList(Object userId, String loginType) {return Arrays.asList("admin");} }
四、安全增強與最佳實踐
- HTTPS 傳輸:防止 Token 在傳輸中被竊取。
- 防偽造 Token:依賴 Redis 存儲校驗,避免算法破解。
- 路徑安全:啟用防火墻策略,攔截含特殊字符(如
;
)的請求。 - Cookie 安全配置:
sa-token:cookie:domain: example.comsecure: true # 僅HTTPS傳輸sameSite: Lax # 防CSRF攻擊
五、總結
Sa-Token 憑借其簡潔的 API 和豐富的功能,成為 Java 權限認證的高效解決方案。無論是單體應用還是微服務架構,均可通過少量配置快速集成,顯著提升開發效率。官方文檔(sa-token.cc)提供了詳細示例和最新特性說明,推薦結合實踐進一步探索。