从登录到单点登录:Sa-Token Java 权限认证框架新手上路指南
2026/9/8 21:11:31 网站建设 项目流程

从登录到单点登录:Sa-Token Java 权限认证框架新手上路指南

【免费下载链接】Sa-Token✨ 开源、免费、一站式 Java 权限认证框架,让鉴权变得简单、优雅!—— 登录认证、权限认证、分布式 Session 会话、微服务网关鉴权、SSO 单点登录、OAuth2.0 统一认证、jwt 集成、API Key 秘钥授权、API 参数签名项目地址: https://gitcode.com/GitHub_Trending/sa/Sa-Token

先别急着学 API:你被鉴权坑过的三个瞬间

做过 Web 项目的人,大概都经历过这三种"日常":

  • 鉴权逻辑散落在各个 Controller:A 接口里手写了一段"没登录就 401",B 接口又手写了一遍,改一处漏三处;
  • 一个公司 N 个子系统:商城、后台、客服端各登录各的,用户一天要输八次密码;
  • 上完集群就出事:用户在节点一登录成功,下一个请求落到节点二,系统判定"未登录",会话直接对不上。

Sa-Token 就是冲着这些场景来的:它是一个开源、免费的轻量级 Java 权限认证框架,覆盖登录认证、权限认证、分布式 Session 会话、微服务网关鉴权、SSO 单点登录、OAuth2.0、JWT 集成、API Key 与参数签名,核心包零第三方依赖,JDK 8 起就能用。

这篇文章不按功能清单讲,而是按一条真实的上手路线走:先跑通登录 → 再守住接口 → 让会话跨服务共享 → 最后打通多系统。每一步都是前一步的地基。

引入依赖,一行代码跑通第一次登录

本地跑起来最快的方式,是把仓库拉下来直接跑示例:

# 学习测试请拉取 master 分支 git clone https://gitcode.com/GitHub_Trending/sa/Sa-Token

在自己的项目里,SpringBoot 场景只需在 pom.xml 加一个依赖(当前版本 1.46.0),SpringBoot 2/3/4、Solon、JFinal 都有现成集成包:

<!-- Sa-Token 权限认证,SpringBoot 集成 --> <dependency> <groupId>cn.dev33</groupId> <artifactId>sa-token-spring-boot-starter</artifactId> <version>1.46.0</version> </dependency>

登录本身只有一行,参数填账号 id:

// 会话登录:框架自动生成 token 凭证与 Session StpUtil.login(10001);

别看代码短,这一句背后框架干了七件事:生成 token 和 Session、记录活跃时间、检查并发登录数是否超限、通知全局侦听器、把 token 写回 Cookie 给前端……你只需要记得结论:登录后,客户端拿到了一枚身份凭证,之后每次请求带着它,框架就知道"这是谁"

顺带两个高频配置:同一个账号想限制并发登录数(比如只允许一台设备在线),在配置文件里设sa-token.max-login-count: 1即可;想要"七天内免登录",登录时传过期参数就行。

守住接口:注解一行与路由拦截两种姿势

登录跑通后,下一个问题:怎么保证"没登录的人进不来、没权限的人做不了"?

Sa-Token 给了两种粒度,按场景挑:

场景做法一句话说明
单个接口要求登录@SaCheckLogin注解未登录直接抛NotLoginException
单个接口校验具体权限@SaCheckPermission("user:add")只有持有该权限的会话才放行
按模块批量拦截SaRouter.match(...)路由拦截适配 restful 风格,一套拦截器管所有路由

注解的用法直观到不用多说:

// 只有具备 user:add 权限的会话才能进入 @SaCheckPermission("user:add") public String addUser() { ... }

路由拦截则适合"按模块划权限"的项目:/user/**校验 user 权限、/admin/**校验 admin 权限,一段配置全部收口,鉴权逻辑从此和业务代码彻底分开。更细节的参数见 注解鉴权 与 路由拦截。

会话跨服务共享:接上 Redis,节点随便落

单体应用里 Session 存在内存里,一切安好。一旦服务扩成多节点,问题就来了:用户在节点一登录,会话只存在节点一的内存里;下一个请求被负载均衡到节点二,节点二查无此人,直接按未登录处理。

主流解法有四类:Session 同步(开销大)、Session 粘滞(要在网关层做)、会话上 Redis(节点变无状态)、无状态 JWT(数据写进令牌自身)。Sa-Token 的推荐路线很清晰:

  • 集成 Redis:引入sa-token-redis-template依赖,会话数据统一落到 Redis,所有节点读同一份数据,重启也不丢。这是微服务分布式 Session 章节的首选方案;
  • 集成 JWT:适合想彻底去掉服务端存储的场景,代价是复杂业务下功能受限。

如果是微服务架构,还有一步是网关统一鉴权:认证在网关一次做完,用户身份随请求头传给下游服务,下游只管做细粒度权限检查,避免每个服务重复实现登录校验。具体怎么接 Gateway,见 网关统一鉴权。

打通多系统:单点登录三种模式,按你的架构对号入座

会话共享解决了"一个系统多节点"的问题,但公司里往往有 N 个系统:商城、后台、客服端。用户每换一个系统就登录一次,体验是灾难。单点登录(SSO)的答案是:在互相信任的多个系统中,用户只登录一次,其余系统全部畅通。

Sa-Token 的 SSO 按架构由简到难分三种模式,选型其实只看两个问题——前端是否同域、后端是否同 Redis:

你的架构模式会话怎么传播
前端同域 + 后端同 Redis模式一共享 Cookie 同步会话
前端不同域 + 后端同 Redis模式二URL 重定向传播会话
前端不同域 + 后端不同 Redis模式三HTTP 请求获取会话(托底方案)

判断不了就先看 SSO 架构选型;非 Sa-Token 甚至非 Java 项目也能通过 NoSdk 模式对接,文档和接口都备好了:SSO 无 SDK 接入。

三种模式都有可直接运行的示例工程,登录流程照一遍就懂:sso1 示例、sso2 示例、sso3 示例。

SSO 和 OAuth2.0 到底选谁?一句话:自己的多个内部系统互通,用 SSO;给第三方应用发带授权范围(Scope)的令牌,用 OAuth2。Sa-Token 的 OAuth2 模块 提供授权码、隐式、密码、客户端凭证四种模式,支持 openid 对接,示例在 sa-token-demo-oauth2。更多实战场景(记住我、同端互斥、二级认证、账号封禁)都在 官方文档 里按章节排好了。

从哪继续看:仓库里的路标

想做的事去哪看
系统学习,文档优先sa-token-doc/ 官方文档(全中文)
边跑边学sa-token-demo/ 60+ 个集成示例
看内核实现sa-token-core/ 核心包源码
加 Redis / JWT / API Key 等能力sa-token-plugin/ 插件全家桶
接入自己用的 Web 框架sa-token-starter/ 各框架集成包

回到这条路线:登录一行代码、接口两行注解、Redis 一个依赖、SSO 一次选型——这就是 Sa-Token 想让你感受到的"简单"。从最小的 SpringBoot 示例跑起来,按上面四个关卡依次通关,你的权限系统就成型了。

【免费下载链接】Sa-Token✨ 开源、免费、一站式 Java 权限认证框架,让鉴权变得简单、优雅!—— 登录认证、权限认证、分布式 Session 会话、微服务网关鉴权、SSO 单点登录、OAuth2.0 统一认证、jwt 集成、API Key 秘钥授权、API 参数签名项目地址: https://gitcode.com/GitHub_Trending/sa/Sa-Token

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

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

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

立即咨询