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 — бесплатный open-source фреймворк для аутентификации и авторизации на Java, который покрывает вход в систему, проверку прав, SSO, OAuth2.0 и авторизацию на шлюзе микросервисов — всё через одну лёгкую зависимость.
Это библиотека, которую я добавлю в свой проект, или сервер, который нужно разворачивать?Это фреймворк, который подключается как Maven-зависимость в pom.xml, а не то, что разворачивается отдельно. Готовые интеграционные пакеты позволяют ему работать из коробки с популярными Java веб-фреймворками.
Сколько кода нужно, чтобы пользователь вошёл в систему?Один статический вызов выполняет вход пользователя, ещё один защищает эндпоинт — реализовывать интерфейсы и создавать файлы конфигурации не нужно. В README сказано, что большинство функций решаются одной строкой кода.
С какими Java-стеками он работает?Официальные интеграционные пакеты покрывают SpringBoot 2, SpringBoot 3/4 с поддержкой JDK 17, Solon, JFinal, SpringMVC и WebFlux — выбираете тот, что подходит под ваш фреймворк.
Документация есть только на китайском?Документация делается в первую очередь на китайском, но есть переводы сообщества на традиционный китайский, английский, японский, корейский и русский, а в FAQ также указаны несколько видеокурсов.
Он работает где-то особенном или везде, где работает Java?Это чистая Java с ядром без зависимостей, поэтому работает везде, где есть JVM — серверный фреймворк для вашего бэкенда, пользователям ничего устанавливать не нужно.
Сможет ли он обеспечить единый вход между системами на разных доменах?Да — есть три режима SSO: общие куки для систем под одним основным доменом, передача сессии через редирект по URL, когда у бэкендов общий Redis, и проверка тикета по HTTP как запасной вариант, когда ни то ни другое не подходит. Проекты не на Java тоже могут интегрироваться — для этого есть примеры NoSdk.
Могу ли я с его помощью сделать свой сервер авторизации OAuth2?Да — модуль OAuth2 реализует все четыре стандартных grant'а: authorization code, implicit, password и client credentials, плюс режим openid для идентификации пользователя.
Что он предлагает для микросервисных архитектур?Авторизацию через перехват маршрутов для шлюзов вроде Gateway, ShenYu и Zuul, распределённые сессии на основе общего дата-центра данных, аутентификацию RPC-вызовов и передачу состояния входа между вызовами dubbo и gRPC.
Что он умеет, кроме входа пользователей?Много всего: выкидывать пользователей офлайн по id аккаунта или значению токена, взаимное исключение на одном устройстве (телефон и ПК онлайн одновременно, второй телефон выкидывается), банить аккаунты по бизнес-правилам или по нарастающей, требовать повторную аутентификацию, а также интегрировать JWT или подпись API между системами. Клиенты без куки — приложения и мини-программы — тоже могут проходить аутентификацию.
Creator
dromara
Size
14.7 MB
Stars
19.1K
Age
6y
Commits · 90 Days