Sa-Token README

The project's README from github.com/dromara/Sa-Token. As one markdown file: README.md.

简体中文 | 繁體中文 | English | 日本語 | 한국어 | Русский

logo

Sa-Token v1.46.0

✨ 开源、免费、一站式 java 权限认证框架,让鉴权变得简单、优雅!

JDK 8~25

在线文档:https://sa-token.com  |  需求提交


📝 前言:

回望 2020 年初,我为 Sa-Token 提交第一行代码之际,彼时市面上 Java 缺少的不仅是一个简洁好用的鉴权框架,更是一整套清晰、自洽的权限架构设计思想。

因此,这几年间我将大量时间倾注在 Sa-Token 的文档编写,几乎每一章节、每一句话、每一个字都经过反复修改、精细打磨,以求做到最清晰、干练、易懂的表述。用心阅读文档,你学习到的将不止是 Sa-Token 框架本身,更是绝大多数场景下权限认证设计的最佳实践。

🛠️ Sa-Token 介绍

Sa-Token 是一个轻量级 Java 权限认证框架,目前拥有五大核心模块:登录认证、权限认证、单点登录、OAuth2.0、微服务鉴权。

你还在手搓以下功能?Stop,让 Sa-Token 来!

sa-token-jss

要在 SpringBoot 项目中使用 Sa-Token,你只需要在 pom.xml 中引入依赖:

<!-- Sa-Token 权限认证, 在线文档:https://sa-token.com -->
<dependency>
	<groupId>cn.dev33</groupId>
	<artifactId>sa-token-spring-boot-starter</artifactId>
	<version>1.46.0</version>
</dependency>

除了支持 SpringBoot2、Sa-Token 还为 SpringBoot3/4、Solon、JFinal 等常见 Web 框架提供集成包,做到真正的开箱即用。

简单示例展示:(点击展开 / 折叠)

Sa-Token 旨在以简单、优雅的方式完成系统的权限认证部分,以登录认证为例,你只需要:

// 会话登录,参数填登录人的账号id 
StpUtil.login(10001);

无需实现任何接口,无需创建任何配置文件,只需要这一句静态代码的调用,便可以完成会话登录认证。

如果一个接口需要登录后才能访问,我们只需调用以下代码:

// 校验当前客户端是否已经登录,如果未登录则抛出 `NotLoginException` 异常
StpUtil.checkLogin();

在 Sa-Token 中,大多数功能都可以一行代码解决:

踢人下线:

// 将账号id为 10077 的会话踢下线 
StpUtil.kickout(10077);

权限认证:

// 注解鉴权:只有具备 `user:add` 权限的会话才可以进入方法
@SaCheckPermission("user:add")
public String insert(SysUser user) {
    // ... 
    return "用户增加";
}

路由拦截鉴权:

// 根据路由划分模块,不同模块不同鉴权 
registry.addInterceptor(new SaInterceptor(handler -> {
	SaRouter.match("/user/**", r -> StpUtil.checkPermission("user"));
	SaRouter.match("/admin/**", r -> StpUtil.checkPermission("admin"));
	SaRouter.match("/goods/**", r -> StpUtil.checkPermission("goods"));
	SaRouter.match("/orders/**", r -> StpUtil.checkPermission("orders"));
	SaRouter.match("/notice/**", r -> StpUtil.checkPermission("notice"));
	// 更多模块... 
})).addPathPatterns("/**");

如果您曾经使用过 Shiro、SpringSecurity,在切换到 Sa-Token 后,您将体会到质的飞跃。

核心模块一览:(点击展开 / 折叠)
  • 登录认证 —— 单端登录、多端登录、同端互斥登录、七天内免登录。
  • 权限认证 —— 权限认证、角色认证、会话二级认证。
  • 踢人下线 —— 根据账号id踢人下线、根据Token值踢人下线。
  • 注解式鉴权 —— 优雅的将鉴权与业务代码分离。
  • 路由拦截式鉴权 —— 根据路由拦截鉴权,可适配 restful 模式。
  • Session会话 —— 全端共享Session,单端独享Session,自定义Session,方便的存取值。
  • 持久层扩展 —— 可集成 Redis,重启数据不丢失。
  • 前后台分离 —— APP、小程序等不支持 Cookie 的终端也可以轻松鉴权。
  • Token风格定制 —— 内置六种 Token 风格,还可:自定义 Token 生成策略。
  • 记住我模式 —— 适配 [记住我] 模式,重启浏览器免验证。
  • 二级认证 —— 在已登录的基础上再次认证,保证安全性。
  • 模拟他人账号 —— 实时操作任意用户状态数据。
  • 临时身份切换 —— 将会话身份临时切换为其它账号。
  • 同端互斥登录 —— 像QQ一样手机电脑同时在线,但是两个手机上互斥登录。
  • 账号封禁 —— 登录封禁、按照业务分类封禁、按照处罚阶梯封禁。
  • 密码加密 —— 提供基础加密算法,可快速 MD5、SHA1、SHA256、AES 加密。
  • 会话查询 —— 提供方便灵活的会话查询接口。
  • Http Basic认证 —— 一行代码接入 Http Basic、Digest 认证。
  • 全局侦听器 —— 在用户登陆、注销、被踢下线等关键性操作时进行一些AOP操作。
  • 全局过滤器 —— 方便的处理跨域,全局设置安全响应头等操作。
  • 多账号体系认证 —— 一个系统多套账号分开鉴权(比如商城的 User 表和 Admin 表)
  • 单点登录 —— 内置三种单点登录模式:同域、跨域、同Redis、跨Redis、前后端分离等架构都可以搞定。
  • 单点注销 —— 任意子系统内发起注销,即可全端下线。
  • OAuth2.0认证 —— 轻松搭建 OAuth2.0 服务,支持openid模式 。
  • 分布式会话 —— 提供共享数据中心分布式会话方案。
  • 微服务网关鉴权 —— 适配Gateway、ShenYu、Zuul等常见网关的路由拦截认证。
  • RPC调用鉴权 —— 网关转发鉴权,RPC调用鉴权,让服务调用不再裸奔
  • 临时Token认证 —— 解决短时间的 Token 授权问题。
  • 独立Redis —— 将权限缓存与业务缓存分离。
  • Quick快速登录认证 —— 为项目零代码注入一个登录页面。
  • 标签方言 —— 提供 Thymeleaf 标签方言集成包,提供 beetl 集成示例。
  • jwt集成 —— 提供三种模式的 jwt 集成方案,提供 token 扩展参数能力。
  • RPC调用状态传递 —— 提供 dubbo、grpc 等集成包,在RPC调用时登录状态不丢失。
  • 参数签名 —— 提供跨系统API调用签名校验模块,防参数篡改,防请求重放。
  • 自动续签 —— 提供两种Token过期策略,灵活搭配使用,还可自动续签。
  • 开箱即用 —— 提供SpringMVC、WebFlux、Solon 等常见框架集成包,开箱即用。
  • 最新技术栈 —— 适配最新技术栈:支持 SpringBoot 3.x,jdk 17。

🍃 SSO 单点登录

Sa-Token SSO 分为三种模式,可解决:同域、跨域、共享Redis、跨Redis、前后端一体、前后端分离、纯 js、vue2、vue3、java 项目、非 java 项目 等架构下的 SSO 认证需求:

sa-token-jss

| 系统架构 | 采用模式 | 简介 | 文档链接 | | :-------- | :-------- |:----------------| :-------- | | 前端同域 + 后端同 Redis | 模式一 | 共享Cookie同步会话 | 文档、示例 | | 前端不同域 + 后端同 Redis | 模式二 | URL重定向传播会话 | 文档、示例 | | 前端不同域 + 后端 不同Redis | 模式三 | HTTP请求获取会话 | 文档、示例 |

  1. 前端同域:就是指多个系统可以部署在同一个主域名之下,比如:c1.domain.com、c2.domain.com、c3.domain.com
  2. 后端同 Redis:就是指多个系统可以连接同一个 Redis,共享会话数据。
  3. 如果无法做到前端同域、后端同 Redis,可以走托底的模式三:Http请求校验 ticket 获取会话。
  4. 提供:NoSdk 模式示例 + sso-server 接口文档,非 Sa-Token 项目、非 java 项目也可以对接。
  5. 提供:多重安全校验:域名校验、ticket校验、参数签名校验,有效防 ticket 劫持,防请求重放等攻击。
  6. 提供:大量实战痛点教学:sso-server 前后端分离设计、sso-client 前后端分离设计、用户数据同步/迁移方案设计。
  7. 提供:直接可运行的 demo 示例,助你快速熟悉 SSO 大致登录流程。
  8. 提供:深度细节优化,参数防丢:笔者曾试验多个SSO框架,均有参数丢失情况,比如登录前是:http://a.com?id=1&name=2,登录成功后就变成了:http://a.com?id=1,Sa-Token-SSO 内有专门算法保证了参数不丢失,登录成功后精准原路返回。

🍂 OAuth2 授权认证

Sa-Token OAuth2 模块分为四种授权模式,解决不同场景下的授权需求

| 授权模式 | 简介 | | :-------- | :-------- | | 授权码式 | OAuth2 标准授权步骤,server 端下放 code,client 端获取 code 码兑换 access_token | | 隐藏式 | 备用选择,server 端使用 URL 重定向方式直接将 access_token 下放到 client 端页面 | | 密码式 | client 直接拿着用户的账号密码换取授权 access_token | | 客户端凭证式 | server 端针对 client 级别的 client_token,代表应用自身的资源授权 |

详细参考文档:https://sa-token.com/doc.html#/oauth2/readme

📖❓ 疑问解答

1、Sa-Token 功能全不全?

七年磨一剑:五大核心模块(登录、鉴权、SSO、OAuth2、微服务) + 众多实用插件 (短 token、jwt 集成、API 参数签名、API Key 秘钥授权...) 我们提供的不只是权限认证,我们提供的是一站式解决方案。

2、Sa-Token 好不好学?

中文文档 + 中文代码注释 + 中文交流社区 + 大量实战案例博客 + 多个视频教程 + 大量优秀开源项目集成案例。

3、Sa-Token 用的人多不多?

截止统计日 (2026-1-25) 起,Sa-Token 在:

这是众多开发者用脚投票的数据,相信这些数据比任何言语都能证明 Sa-Token 的热度。

4、Sa-Token 有哪些权威认证?

曾获荣誉包括但不限于:Gitee GVP 最有价值开源项目、GitCode G-Star 优质开源项目、OSCHINA 2021 人气指数 TOP 30 开源项目、OSCHINA 2022 年度最火热中国开源项目社区之一、开放原子基金会2023快速成长开源项目、 Dromara 组织顶尖项目(之一)、可信开源社区共同体预备成员、所在开源社区 “Dromara” 荣获《2024中国互联网发展创新与投资大赛(开源)》二等奖。 Gitee High Star 计划项目(5000+star)。Gitee 2025年度开源项目 Web应用开发 Top 2。

5、Sa-Token 收费吗?

Sa-Token 采用 Apache-2.0 开源协议,承诺框架本身与在线文档永久免费开放。当然如果您有心赞助 Sa-Token,我们也不回避:赞助链接。 我们将定期同步赞助者名单到在线文档展示。(您需要注意的一点是:该赞助仅为友情赞助,不提供任何商业交换)

6、Sa-Token 是封装的 SpringSecurity 吗?是套壳 ApacheShiro 吗?

不是。Sa-Token 不是一个后台模板,也不是针对 xx 框架的二次封装套壳,而是从 0 开始的纯血自研框架,核心包零依赖,完全自主可控的架构内核 + 众多主流框架的集成适配。

证书 ⭐ 奖杯 🏆 荣誉展示

🚀 优秀开源集成案例

还有更多优秀开源案例无法逐一展示,请参考:Awesome-Sa-Token

🌍 其它语言版本

Sa-Token 社区成员贡献了多语言实现版本:

我们诚邀对上述语言较为熟练的开发者,一起建设相关版本。🤝

🔗 友情链接

📦 代码托管

📚 示例大全

我们为框架几乎所有技术点均单独制作了对应的集成示例,此压缩包共计 60+ Demo:涵盖 Sa-Token 登录认证、权限认证、SSO 单点登录、OAuth2 统一认证、微服务鉴权、API Key 认证、JWT集成、跨系统调用参数签名校验 等鉴权认证的方方面面。

下载地址:https://sa-token.com/doc.html#/more/download-demos

💬 交流群

QQ交流群:1098917026 点击加入

微信交流群:

PS:扫码添加微信 (备注:sa-token),邀您加入群聊。


微信群

加入群聊的好处:

Sa-Token (dromara/Sa-Token)

Searching Database…

19.1K ·GitHub
这是做什么用的?Sa-Token 是一个免费开源的 Java 认证授权框架,覆盖登录、权限校验、单点登录(SSO)、OAuth2.0 和微服务网关鉴权——一个轻量依赖全搞定。
它是加到自己项目里的依赖库,还是需要单独部署的服务?它是一个以 Maven 依赖形式接入 pom.xml 的框架,不需要单独部署。官方提供的现成集成包让它在常见 Java Web 框架里开箱即用。
让用户登录大概要写多少代码?一行静态调用就能让用户登录,一行就能给接口加鉴权——不用实现任何接口,也不用建任何配置文件。README 里说大部分功能一行代码就能搞定。
它支持哪些 Java 技术栈?官方集成包覆盖 SpringBoot 2、支持 JDK 17 的 SpringBoot 3/4、Solon、JFinal、SpringMVC 和 WebFlux——按你用的框架选对应的包就行。
文档是不是只有中文的?文档以中文为主,但社区提供了繁体中文、英文、日文、韩文和俄文翻译,FAQ 里还列了多个视频教程。
它对运行环境有什么特殊要求,还是 Java 能跑的地方都能跑?它是纯 Java 实现,核心零依赖,所以 JVM 能跑的地方它就能跑——这是给你后端用的服务端框架,最终用户不需要安装任何东西。
它能实现跨不同域名的多系统单点登录吗?可以——提供三种 SSO 模式:同一主域名下的系统共享 Cookie;后端共用 Redis 时通过 URL 重定向传递会话;两者都不适用时退而使用 HTTP ticket 校验。非 Java 项目也可以参照 NoSdk 示例接入。
我能用它搭建自己的 OAuth2 授权服务器吗?可以——OAuth2 模块实现了全部四种标准授权模式:授权码模式、隐式模式、密码模式和客户端凭证模式,还提供 openid 模式来标识用户身份。
针对微服务架构它提供了什么?包括对 Gateway、ShenYu、Zuul 等网关的路由拦截鉴权,基于共享数据中心(Redis)的分布式会话,RPC 调用鉴权,以及登录状态在 dubbo 和 gRPC 调用之间的传递。
除了让用户登录,它还能做什么?功能很多:可以按账号 id 或 token 值把用户踢下线;支持同端互斥登录(手机和电脑可以同时在线,第二台手机登录会把第一台踢掉);可以按业务规则或递进阶梯封禁账号;支持二级认证;还能集成 JWT 或跨系统 API 签名。App、小程序这类不带 Cookie 的客户端也能完成认证。
Creator
dromara
Size
14.7 MB
Stars
19.1K
Age
6y
Commits · 90 Days