Sa-Token 项目介绍
Sa-Token 是一个轻量级 Java 权限认证框架,专注于解决登录认证、权限认证、单点登录、OAuth2.0 和微服务鉴权等核心问题。它通过简洁的 API 设计和丰富的功能模块,帮助开发者快速构建安全、高效的权限管理系统。
Sa-Token 是什么
Sa-Token 是一个轻量级 Java 权限认证框架,专注于解决登录认证、权限认证、单点登录、OAuth2.0 和微服务鉴权等核心问题。它通过简洁的 API 设计和丰富的功能模块,帮助开发者快速构建安全、高效的权限管理系统。以下将从多个维度详细介绍 Sa-Token 的核心特性和设计理念。
核心特性
-
登录认证
Sa-Token 提供了灵活的登录认证机制,支持单端登录、多端登录、同端互斥登录等功能。通过一行代码即可完成会话登录:StpUtil.login(10001); // 登录账号id为10001的用户 -
权限认证
支持基于角色和权限的细粒度控制,可通过注解或路由拦截实现权限校验:@SaCheckPermission("user:add") // 只有具备user:add权限的用户才能访问此方法 public String addUser() { return "用户添加成功"; } -
单点登录 (SSO)
Sa-Token 提供了三种 SSO 模式,适应不同架构需求:- 模式一:同域 + 同 Redis,共享 Cookie 同步会话。
- 模式二:不同域 + 同 Redis,通过 URL 重定向传播会话。
- 模式三:不同域 + 不同 Redis,通过 HTTP 请求获取会话。
-
OAuth2.0 支持
支持授权码、隐藏式、密码式和客户端凭证四种授权模式,满足多样化的授权需求。 -
微服务鉴权
适配 Gateway、ShenYu、Zuul 等常见网关,提供分布式会话和 RPC 调用鉴权能力。
设计理念
-
简洁易用
Sa-Token 的 API 设计遵循“一行代码解决问题”的原则,例如踢人下线:StpUtil.kickout(10077); // 将账号id为10077的用户踢下线 -
高性能
通过灵活的持久层扩展(如 Redis 集成)和高效的算法设计,确保框架在高并发场景下的性能表现。 -
模块化设计
核心功能模块化,开发者可按需引入,避免冗余依赖。例如:sa-token-core:核心模块。sa-token-spring-boot-starter:Spring Boot 集成模块。sa-token-jwt:JWT 支持模块。
-
多框架适配
不仅支持 Spring Boot,还适配 Solon、JFinal 等框架,真正做到开箱即用。
核心类解析
-
StpUtil
工具类,封装了登录、注销、权限校验等常用操作。例如:StpUtil.checkLogin(); // 校验当前会话是否登录 -
SaTokenConfig
配置类,用于全局设置 Token 名称、过期时间、是否并发登录等参数。例如:@Bean public SaTokenConfig saTokenConfig() { SaTokenConfig config = new SaTokenConfig(); config.setTokenName("satoken"); config.setTimeout(86400); // Token有效期24小时 return config; } -
StpInterface
接口类,开发者需实现其方法以自定义权限数据加载逻辑。例如:@Component public class StpInterfaceImpl implements StpInterface { @Override public List<String> getPermissionList(Object loginId, String loginType) { return Arrays.asList("user:add", "user:delete"); } }
技术对比
| 特性 | Sa-Token | Shiro | Spring Security |
|---|---|---|---|
| 学习曲线 | 低 | 中 | 高 |
| 功能丰富度 | 高 | 中 | 高 |
| 性能 | 高 | 中 | 低 |
| 多框架适配 | 支持 | 有限 | 仅Spring |
| 社区活跃度 | 高 | 中 | 高 |
适用场景
- 快速开发:适合需要快速集成权限管理的项目。
- 微服务架构:提供分布式会话和鉴权支持。
- 多端登录:支持APP、Web、小程序等多端同时在线。
通过以上介绍,可以看出 Sa-Token 是一个功能强大、设计优雅的权限认证框架,能够显著提升开发效率并降低系统复杂度。
核心功能模块
Sa-Token 是一个轻量级 Java 权限认证框架,其核心功能模块设计简洁高效,覆盖了登录认证、权限认证、单点登录、OAuth2.0 和微服务鉴权等多个场景。以下是对其核心功能模块的详细解析:
1. 登录认证
Sa-Token 提供了灵活的登录认证功能,支持单端登录、多端登录、同端互斥登录等场景。核心类 StpUtil 和 StpLogic 封装了登录认证的核心逻辑。
核心功能点:
- 会话登录:通过
StpUtil.login(Object id)实现用户登录。 - 会话注销:通过
StpUtil.logout()实现用户注销。 - 会话检查:通过
StpUtil.checkLogin()检查用户是否登录。 - 记住我模式:支持配置会话的持久化,实现免登录功能。
// 示例代码:登录与注销
StpUtil.login(10001); // 用户登录
StpUtil.logout(); // 用户注销
流程图:
2. 权限认证
Sa-Token 支持基于角色和权限的细粒度访问控制,通过注解和路由拦截两种方式实现权限校验。
核心功能点:
- 注解鉴权:使用
@SaCheckPermission和@SaCheckRole注解实现方法级别的权限控制。 - 路由拦截:通过
SaRouter.match()实现基于路径的权限拦截。
// 示例代码:注解鉴权
@SaCheckPermission("user:add")
public String addUser(User user) {
return "用户添加成功";
}
// 示例代码:路由拦截
registry.addInterceptor(new SaInterceptor(handler -> {
SaRouter.match("/admin/**").check(r -> StpUtil.checkPermission("admin"));
}));
类图:
3. 单点登录(SSO)
Sa-Token 提供了三种单点登录模式,支持同域、跨域、同 Redis 和跨 Redis 等多种场景。
核心功能点:
- 模式一:共享 Cookie 同步会话。
- 模式二:URL 重定向传播会话。
- 模式三:HTTP 请求获取会话。
// 示例代码:SSO 登录
StpUtil.login(10001, "sso");
状态图:
4. OAuth2.0 认证
Sa-Token 支持 OAuth2.0 的四种授权模式,包括授权码模式、隐藏式模式、密码模式和客户端凭证模式。
核心功能点:
- 授权码模式:适用于第三方应用授权。
- 密码模式:适用于信任的内部应用。
- 客户端凭证模式:适用于服务端间通信。
// 示例代码:OAuth2.0 授权码模式
StpUtil.createToken(10001, "oauth2");
表格对比:
| 授权模式 | 适用场景 |
|---|---|
| 授权码模式 | 第三方应用授权 |
| 隐藏式模式 | 前端无后端支持 |
| 密码模式 | 信任的内部应用 |
| 客户端凭证模式 | 服务端间通信 |
5. 微服务鉴权
Sa-Token 提供了微服务网关鉴权和 RPC 调用鉴权功能,确保服务调用的安全性。
核心功能点:
- 网关鉴权:适配 Gateway、ShenYu 等常见网关。
- RPC 鉴权:支持 Dubbo、gRPC 等框架的鉴权。
// 示例代码:RPC 调用鉴权
StpUtil.checkPermission("rpc:call");
序列图:
通过以上核心功能模块的设计,Sa-Token 能够满足大多数 Java 项目的权限认证需求,同时保持代码的简洁性和易用性。
适用场景
Sa-Token 是一个轻量级 Java 权限认证框架,适用于多种场景下的权限管理和认证需求。以下是一些典型的适用场景:
1. 单点登录(SSO)系统
Sa-Token 提供了三种单点登录模式,适用于不同架构的 SSO 需求:
- 同域 SSO:适用于多个子系统部署在同一主域名下的场景。
- 跨域 SSO:适用于子系统部署在不同域名下的场景,支持 URL 重定向传播会话。
- 前后端分离 SSO:适用于前后端分离架构,支持通过 HTTP 请求获取会话。
2. 微服务鉴权
Sa-Token 支持微服务架构下的鉴权需求,适配 Gateway、ShenYu、Zuul 等常见网关的路由拦截认证。同时,提供 RPC 调用鉴权功能,确保服务调用的安全性。
3. 多端登录与互斥登录
Sa-Token 支持多端登录(如手机、电脑同时在线),同时支持同端互斥登录(如两个手机不能同时登录同一账号)。
4. 注解式权限控制
通过 @SaCheckLogin、@SaCheckRole、@SaCheckPermission 等注解,可以轻松实现方法级别的权限控制。
@SaCheckLogin
public String getUserInfo() {
// 必须登录才能访问
}
@SaCheckPermission("user:add")
public String addUser() {
// 必须具有 user:add 权限才能访问
}
5. 会话管理与持久化
Sa-Token 提供了灵活的会话管理功能,支持全端共享 Session、单端独享 Session 等模式,并可集成 Redis 实现持久化。
6. 临时 Token 认证
适用于短时间的 Token 授权需求,如验证码、临时访问链接等。
String tempToken = SaTempUtil.createToken("临时数据", 300); // 有效期 5 分钟
7. 多账号体系认证
支持一个系统中多套账号分开鉴权,例如商城的用户表和管理员表。
// 用户登录
StpUserUtil.login(10001);
// 管理员登录
StpAdminUtil.login(20001);
8. 安全防护
Sa-Token 内置防火墙功能,支持路径危险字符检测、参数校验等,有效防止常见的安全攻击。
9. 前后端分离架构
Sa-Token 支持前后端分离架构,适用于 APP、小程序等不支持 Cookie 的终端。
// 前端通过 Header 传递 Token
StpUtil.checkLogin();
10. OAuth2.0 认证
Sa-Token 提供 OAuth2.0 模块,支持授权码、隐藏式、密码式和客户端凭证四种授权模式。
总结
Sa-Token 的设计目标是简单、灵活、高效,适用于从单体应用到微服务架构的各种权限认证需求。无论是传统的 Web 应用,还是现代化的前后端分离项目,Sa-Token 都能提供强大的支持。
项目优势
Sa-Token 是一个轻量级 Java 权限认证框架,旨在以简单、优雅的方式解决系统的权限认证问题。以下是 Sa-Token 的核心优势:
1. 简单易用
Sa-Token 的 API 设计简洁直观,大多数功能可以通过一行代码实现。例如,登录认证仅需调用 StpUtil.login(10001),权限校验仅需 StpUtil.checkPermission("user:add")。开发者无需实现复杂接口或繁琐配置,即可快速集成到项目中。
// 登录认证
StpUtil.login(10001);
// 权限校验
@SaCheckPermission("user:add")
public String addUser(User user) {
return "用户添加成功";
}
2. 功能全面
Sa-Token 提供了丰富的功能模块,覆盖了权限认证的常见需求:
- 登录认证:支持单端登录、多端登录、同端互斥登录等场景。
- 权限认证:支持角色、权限、会话二级认证等。
- 单点登录 (SSO):内置三种模式,适配同域、跨域、前后端分离等架构。
- OAuth2.0:支持授权码、隐藏式、密码式等多种授权模式。
- 微服务鉴权:适配 Gateway、ShenYu、Zuul 等常见网关。
3. 高性能与轻量级
Sa-Token 的核心代码精简高效,无冗余依赖,启动速度快,内存占用低。支持 Redis 持久化,确保高并发场景下的性能稳定。
4. 灵活的扩展性
Sa-Token 提供了多种扩展点,开发者可以自定义 Token 生成策略、会话存储方式、权限校验逻辑等。例如,通过实现 StpInterface 接口,可以自定义权限数据源。
public class CustomStpInterface implements StpInterface {
@Override
public List<String> getPermissionList(Object loginId, String loginType) {
// 自定义权限逻辑
return Arrays.asList("user:add", "user:delete");
}
}
5. 强大的社区支持
Sa-Token 拥有活跃的开源社区,文档详尽,示例丰富,问题响应迅速。以下是社区生态的部分亮点:
| 功能 | 支持情况 |
|---|---|
| 文档 | 提供中文和英文文档 |
| 示例项目 | 提供多种场景的 Demo 项目 |
| 插件生态 | 支持 JWT、Redis、SSO 等插件 |
| 社区交流 | QQ 群、微信群、GitHub Issues |
6. 跨框架适配
Sa-Token 不仅支持 Spring Boot,还适配了 Solon、JFinal、WebFlux 等常见框架,真正做到开箱即用。
7. 安全可靠
Sa-Token 内置了多种安全机制,包括 Token 防篡改、请求防重放、会话防劫持等,确保系统安全无虞。
// 启用二级认证
StpUtil.openSafe(3600);
// 校验二级认证
StpUtil.checkSafe();
8. 前后端分离友好
Sa-Token 支持 Cookie、Header、URL 等多种 Token 传递方式,完美适配前后端分离架构。
// 从 Header 中获取 Token
String token = request.getHeader("satoken");
通过以上优势,Sa-Token 能够帮助开发者快速构建安全、高效的权限认证系统,大幅提升开发效率。
总结
Sa-Token 是一个功能强大、设计优雅的权限认证框架,能够显著提升开发效率并降低系统复杂度。无论是传统的 Web 应用,还是现代化的前后端分离项目,Sa-Token 都能提供强大的支持。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



