| name | sa-token |
| description | Sa-Token 轻量级 Java 权限认证框架核心技能。覆盖登录认证、权限/角色认证、注解鉴权、路由拦截鉴权、Session 会话、踢人下线、Token 有效期策略、框架配置、Token 风格与提交前缀、前后端分离、记住我模式、同端互斥登录、NotLoginException 场景值处理。
StpUtil 是核心门面工具类,提供 login/checkLogin/logout/isLogin/getLoginId/getTokenValue 等全套鉴权 API。
当用户需要 Java Web 项目集成权限认证、使用 StpUtil 进行登录/权限校验、配置路由拦截器或注解鉴权时使用。
不涉及二级认证/封禁/多账号/SSO/OAuth2/微服务/API安全/JWT/Redis 等高级功能,请使用对应专项技能。
|
| license | Apache-2.0 |
Sa-Token 核心权限认证框架
基于 Sa-Token v1.45.0 | 官方文档:https://sa-token.cc | GitHub:https://github.com/dromara/sa-token
Sa-Token 是一个轻量级 Java 权限认证框架,核心包零依赖,提供了完整的鉴权体系。StpUtil 是其核心门面工具类。
Capability Boundaries
✅ Strong Suits
- 登录认证 —
StpUtil.login() 会话登录、记住我模式、指定设备类型、登录扩展参数
- 会话校验 —
StpUtil.isLogin()/checkLogin()/getLoginId() 全套查询 API
- Token 管理 — 获取 token 值/名称/信息、根据 token 反查账号、token 有效期双策略(timeout + active-timeout)
- 权限/角色认证 — 实现 StpInterface 定义权限加载器、checkPermission/checkRole 系列 API、权限通配符
*
- 注解鉴权 —
@SaCheckLogin、@SaCheckPermission、@SaCheckRole、@SaIgnore、@SaCheckOr
- 路由拦截鉴权 — SaInterceptor + SaRouter 匹配链、stop/back/free 退出机制、多条件匹配
- Session 会话 — Account-Session / Token-Session / Custom-Session 三种模型
- 踢人下线 — 强制注销、踢下线、顶下线三种操作
- 框架配置 — application.yml 全配置项、代码配置方式
- 前后端分离 — Cookie 模式 vs Header 模式,小程序/APP 无 Cookie 适配
- Token 自定义 — 6 种内置风格、自定义生成策略、Bearer 提交前缀
- 同端互斥登录 — 同一设备类型仅允许一个在线
❌ Out of Scope(替代方案)
- 二级认证/账号封禁/模拟他人/多账号 → sa-token-advanced
- SSO 单点登录 → sa-token-sso
- OAuth2.0 服务端 → sa-token-oauth2
- 微服务 Same-Token/网关鉴权 → sa-token-micro
- API 签名/API Key/临时 Token → sa-token-api-security
- JWT 集成/Redis 持久化/模板引擎 → sa-token-integration
适用场景
当用户需要以下场景时,激活此技能:
- 新项目集成权限认证 — SpringBoot项目引入Sa-Token,配置StpInterface,实现登录/权限校验
- 现有项目添加鉴权 — 为已有接口添加登录校验/权限校验/角色校验
- 配置路由拦截器 — 统一拦截所有请求,按模块划分不同鉴权规则
- 使用注解鉴权 — 使用@SaCheckLogin/@SaCheckPermission等注解
- 前后端分离适配 — 无Cookie环境下Token的传递与校验
- 调试与排错 — 排查NotLoginException各类场景值、Token有效期问题
Workflow
Step 1. 引入依赖 — 添加 sa-token-spring-boot-starter 依赖(根据SpringBoot版本选择)
Step 2. 配置框架 — application.yml 配置 token 名称、有效期、风格等
Step 3. 实现 StpInterface — 自定义权限加载器,返回权限码和角色集合
Step 4. 登录认证 — 调用 StpUtil.login(id) 完成会话登录
Step 5. 权限校验 — 使用 StpUtil 方法或注解进行权限/角色校验
Step 6. 路由拦截 — SaInterceptor + SaRouter 实现全局路由鉴权
Step 7. 集成测试 — 验证登录/注销/权限校验/注解鉴权全流程
StpUtil 核心 API 速查
StpUtil.login(Object loginId);
StpUtil.login(10001, "PC");
StpUtil.login(10001, true);
StpUtil.login(10001, new SaLoginParameter()...);
StpUtil.logout();
StpUtil.logout(10001);
StpUtil.logoutByTokenValue(token);
StpUtil.logoutByLoginId(10001, "PC");
StpUtil.kickout(10001);
StpUtil.kickoutByTokenValue(token);
StpUtil.isLogin();
StpUtil.checkLogin();
StpUtil.getLoginId();
StpUtil.getLoginIdAsString()/AsInt()/AsLong();
StpUtil.getLoginIdDefaultNull();
StpUtil.getLoginIdByToken(token);
StpUtil.getTokenValue();
StpUtil.getTokenValueByLoginId(10001);
StpUtil.getTokenListByLoginId(10001);
StpUtil.getTokenName();
StpUtil.getTokenTimeout();
StpUtil.getTokenInfo();
StpUtil.setTokenValue("xxx-xxx");
StpUtil.renewRefresh();
StpUtil.getTerminalListByLoginId(10001);
StpUtil.getPermissionList();
StpUtil.hasPermission("user.add");
StpUtil.checkPermission("user.add");
StpUtil.checkPermissionAnd("add","del","get");
StpUtil.checkPermissionOr("add","del","get");
StpUtil.hasRole("admin");
StpUtil.checkRole("admin");
StpUtil.getSession();
StpUtil.getSessionByLoginId(10001);
StpUtil.getTokenSession();
StpUtil.getTokenSessionByTokenValue("xxx-xxx");
SaSessionCustomUtil.getSessionById("goods-10001");
参考文档
| 主题 | 文件 | 来源 |
|---|
| 登录认证完整指南 | references/login-auth.md | GitHub |
| 权限/角色认证 | references/jur-auth.md | GitHub |
| 注解鉴权 | references/at-check.md | GitHub |
| 路由拦截鉴权 | references/route-check.md | GitHub |
| Session 会话 | references/session.md | GitHub |
| 框架配置 | references/config.md | GitHub |
| 踢人下线 | references/kickout.md | GitHub |
| Token 有效期 | references/token-timeout.md | GitHub |
| NotLoginException | references/not-login-scene.md | GitHub |
| 前后端分离 & 记住我 | references/not-cookie.md | GitHub、remember-me |
| Token 风格 & 前缀 | references/token-style.md | GitHub、token-prefix |
| 登录参数详解 | references/login-parameter.md | GitHub |
| 同端互斥登录 | references/mutex-login.md | GitHub |
| 快速入门 | examples/quickstart.md | GitHub |
Gotchas
- StpInterface 不会在启动时执行 — 只在调用鉴权方法时触发查询
- 注解鉴权默认关闭 — 必须手动注册
SaInterceptor
- SaSession ≠ HttpSession — 两者无任何关系,不要混淆使用
- 前端鉴权只是辅助 — 不能替代后端校验
@SaIgnore 只对 SaInterceptor 和 AOP 生效 — 自定义拦截器不受影响
@SaCheckPermission 默认 AND 模式 — OR 模式需指定 mode = SaMode.OR
StpUtil.logout() 注销范围可通过 logout-range 配置 — 默认只注销当前 token
- Cookie 模式默认注入 Cookie — 关闭可用
is-read-cookie: false
Data Privacy
本技能不收集、存储或传输任何用户数据。