Java权限认证还要自己手写Token?Sa-Token的3种鉴权姿势帮你省掉一半代码
2026/9/8 22:32:02 网站建设 项目流程

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. 多账号体系:用户表和管理员表不再打架

场景:电商系统里useradmin两套账号,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),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询