Java权限认证还要自己手写Token?Sa-Token的3种鉴权姿势帮你省掉一半代码
【免费下载链接】Sa-Token✨ 开源、免费、一站式 Java 权限认证框架,让鉴权变得简单、优雅!—— 登录认证、权限认证、分布式 Session 会话、微服务网关鉴权、SSO 单点登录、OAuth2.0 统一认证、jwt 集成、API Key 秘钥授权、API 参数签名项目地址: https://gitcode.com/GitHub_Trending/sa/Sa-Token
每次接新系统,第一件破事就是重写登录、校验、过期那一套。Sa-Token(一站式 Java 权限认证框架)把登录认证、权限认证、分布式 Session、SSO 单点登录都包进去了,你只管写业务,鉴权它来扛。
🧩 先看清它替你把哪些活干了
把它当成一个"鉴权工具箱"看,比背 API 更直观:
| 能力分组 | 具体能干嘛 | 你省掉了什么 |
|---|---|---|
| 登录认证 | 会话登录、踢人下线、记住我、同端互斥 | 手搓 Token 生成、刷新、过期的全套逻辑 |
| 权限认证 | 注解鉴权、路由拦截、角色/权限/二级认证 | 在每个 Controller 里重复写 if 判断 |
| 会话管理 | 全端共享/单端独享 Session、多账号体系 | 自己维护 Map 存登录态、还要怕重启丢数据 |
| 分布式扩展 | 集成 Redis、独立 Redis、分布式 Session | 集群环境下自己同步 Session 的脏活 |
| 单点登录 SSO | 同域/跨域/跨 Redis 三种模式 | 从零设计 ticket 校验、防重放、防劫持 |
| 生态适配 | SpringBoot 2/3/4、Solon、JFinal、JWT | 为每个框架重写一遍适配层 |
核心源码零第三方依赖,就放在 sa-token-core,想查实现直接翻源码。
🚀 3 分钟跑通你的第一个鉴权接口
跟着做,假设你手上已经有一个 SpringBoot 项目。
第一步,在 pom.xml 里挂上依赖:
<dependency> <groupId>cn.dev33</groupId> <artifactId>sa-token-spring-boot-starter</artifactId> <version>1.46.0</version> </dependency>这一步只做一件事:把框架装进来,装完就能用,不用建任何配置文件。
第二步,写个登录接口。这里拿"运营后台的工号登录"举例,而不是常见的用户名密码:
@RestController public class AuditController { // 运营人员用工号登录 @PostMapping("/audit/login") public String login(String workNo) { StpUtil.login(workNo); // 生成会话凭证,自动写进 Cookie return "已登录:" + workNo; } // 只有登录态才放行 @GetMapping("/audit/task") public String task() { return "当前操作人:" + StpUtil.getLoginId(); } }注意StpUtil.login(workNo)这一行——凭证生成、写入 Cookie、后续校验全是框架内部的事。
第三步,想给某些接口加"必须登录",不用手写拦截,直接调一下:
// 在需要鉴权的接口里,或全局拦截器中 StpUtil.checkLogin(); // 未登录直接抛 NotLoginException启动项目,用 Postman 或浏览器先打/audit/login?workNo=op_1024,再打/audit/task,能拿到操作人就说明链路通了。想验证"没登录会怎样",直接裸调/audit/task,框架会替你挡下。完整可跑的样例在 sa-token-demo-springboot,对着抄就行。
✨ 三个真正省时间的亮点
1. 多账号体系:用户表和管理员表不再打架
场景:电商系统里user和admin两套账号,id 都可能撞成 10001,混用StpUtil就乱套了。
做法:给其中一套账号复制一个工具类,换个loginType:
public class StpUserUtil { // loginType 换成 "user",与 admin 的体系隔离 public static StpLogic stpLogic = new StpLogic("user"); }效果:StpUserUtil管用户、StpUtil管管理员,两套会话、两套 Token 互不干扰,不用在业务代码里加前缀、减前缀。原理和更多写法见 多账号认证文档。
2. 分布式 Session:集群下登录态不再各玩各的
场景:服务部署多副本,用户登录落在 A 节点,下次请求打到 B 节点,登录态没了。
做法:换掉默认的内存 DAO,接入 Redis。项目里连"独立 Redis"(权限缓存和业务缓存分开)都给你留好了口子,见 分布式Session文档。
效果:会话数据落到共享存储,哪个节点接请求都认同一个登录态,还省了重启丢数据的烦恼。存储选型细节可以看 integ-redis 说明。
3. SSO 三种模式:跨域跨 Redis 也不怕
场景:公司好几个子系统,想让员工登录一次全通行,但域名不同、Redis 也不同。
做法:按你的架构对号入座——同域同 Redis 走模式一(共享 Cookie);跨域同 Redis 走模式二(URL 重定向传会话);跨域跨 Redis 走模式三(HTTP 校验 ticket)。
效果:不用自己设计 ticket 校验、参数签名、防劫持那一堆安全细节,框架内置了。三种模式的取舍和示例在 SSO 文档,可跑通的工程在 sa-token-demo-sso。
⚠️ 这几个坑我替你踩过
- ⚠️Token 有效期别乱填 -1。默认 30 天,
-1是永久有效。内网工具可以长一点,C 端用户建议配active-timeout(活跃冻结),长时间不访问自动失效,更安全。 - ⚠️多账号体系别偷懒共用 StpUtil。id 撞车是迟早的事,按前面多账号那节隔离开,能省掉后期大量诡异 bug。
- 💡集群环境一定要把 DAO 换成 Redis,默认内存 DAO 只适合单机,否则登录态不共享。
- 💡"记住我"别和长 Token 混着用。记住我是浏览器重启后免验证,适合 7 天这类中短期;长期有效直接用
timeout配即可,两者语义不一样。配置项全集在 框架配置文档。
📦 顺手给你指几个路
- 想快速上手:sa-token-demo-first-run,最小可跑工程
- 想看鉴权全貌:登录认证文档
- 想玩单点登录:sa-token-plugin/sa-token-sso 插件源码
- 想看注解鉴权细节:注解鉴权文档
🎯 下一步
把 sa-token-demo-springboot 拉下来跑一遍,把登录接口改成你业务里的登录方式。跑不通或有疑问,直接去项目 issue 里提,比闷头查快得多。
【免费下载链接】Sa-Token✨ 开源、免费、一站式 Java 权限认证框架,让鉴权变得简单、优雅!—— 登录认证、权限认证、分布式 Session 会话、微服务网关鉴权、SSO 单点登录、OAuth2.0 统一认证、jwt 集成、API Key 秘钥授权、API 参数签名项目地址: https://gitcode.com/GitHub_Trending/sa/Sa-Token
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考