Sa-Token 是一个轻量级的 Java 权限认证框架,专为简化权限管理和用户认证而设计。它支持多种认证方式(如登录认证、权限认证、角色认证等),并且可以与 Spring Boot、Spring MVC 等框架无缝集成。Sa-Token 的设计理念是简单易用,适合快速开发中小型项目。
以下是 Sa-Token 的核心功能和使用示例:
Sa-Token 的核心功能
-
登录认证:
-
提供简单的登录、注销接口。
-
支持多端登录(如 Web、APP、小程序等)。
-
-
权限认证:
-
基于注解或代码的方式实现权限校验。
-
支持细粒度的权限控制。
-
-
角色认证:
-
支持用户角色的校验和管理。
-
-
会话管理:
-
提供会话管理功能,支持分布式会话。
-
-
踢人下线:
-
支持强制用户下线。
-
-
注解式开发:
-
提供
@SaCheckLogin
、@SaCheckRole
、@SaCheckPermission
等注解,简化权限校验。
-
-
集成简单:
-
支持与 Spring Boot、Spring MVC 等框架无缝集成。
-
Sa-Token 的快速入门
1. 添加依赖
在 pom.xml
中添加 Sa-Token 的依赖:
<dependency>
<groupId>cn.dev33</groupId>
<artifactId>sa-token-spring-boot-starter</artifactId>
<version>1.34.0</version> <!-- 请使用最新版本 -->
</dependency>
2. 配置 Sa-Token
在 application.yml
中配置 Sa-Token:
sa-token:
token-name: satoken # Token 名称
timeout: 1800 # Token 有效期,单位:秒
activity-timeout: -1 # Token 临时有效期(-1 表示永久有效)
is-share: true # 是否共享 Cookie
is-read-body: true # 是否从请求体中读取 Token
3. 实现登录功能
在控制器中实现登录和注销功能:
import cn.dev33.satoken.stp.StpUtil;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/user")
public class UserController {
// 登录
@GetMapping("/login")
public String login(String username, String password) {
// 模拟用户登录
if ("admin".equals(username) && "123456".equals(password)) {
StpUtil.login(1001); // 将用户 ID 存储到 Token 中
return "登录成功";
}
return "登录失败";
}
// 注销
@GetMapping("/logout")
public String logout() {
StpUtil.logout();
return "注销成功";
}
// 检查是否登录
@GetMapping("/checkLogin")
public String checkLogin() {
return "当前会话是否登录:" + StpUtil.isLogin();
}
}
4. 权限校验
使用注解或代码实现权限校验:
-
注解方式:
@SaCheckLogin @GetMapping("/info") public String info() { return "用户信息"; } @SaCheckRole("admin") @GetMapping("/admin") public String admin() { return "管理员页面"; } @SaCheckPermission("user:add") @GetMapping("/addUser") public String addUser() { return "添加用户"; }
-
代码方式:
@GetMapping("/info") public String info() { if (!StpUtil.isLogin()) { return "未登录"; } return "用户信息"; }
Sa-Token 的高级功能
-
多端登录:
-
支持同一用户在不同设备上登录,并为每个设备分配独立的 Token。
-
-
踢人下线:
-
强制指定用户下线:
StpUtil.kickout(1001); // 将用户 ID 为 1001 的用户踢下线
-
-
分布式会话:
-
通过集成 Redis 实现分布式会话管理。
-
-
路由拦截
-
使用 Sa-Token 的拦截器实现全局权限校验。
-
Sa-Token 的优点
-
简单易用:API 设计简洁,学习成本低。
-
功能丰富:支持登录认证、权限认证、角色认证等多种功能。
-
灵活扩展:支持自定义 Token 生成策略、会话存储策略等。
-
性能高效:轻量级设计,性能优异。