{"id":13458840,"url":"https://github.com/dromara/Sa-Token","last_synced_at":"2025-03-24T16:31:04.379Z","repository":{"id":37289497,"uuid":"237940592","full_name":"dromara/Sa-Token","owner":"dromara","description":"这可能是史上功能最全的Java权限认证框架！目前已集成——登录认证、权限认证、分布式Session会话、微服务网关鉴权、单点登录、OAuth2.0、踢人下线、Redis集成、前后台分离、记住我模式、模拟他人账号、临时身份切换、账号封禁、多账号认证体系、注解式鉴权、路由拦截式鉴权、花式token生成、自动续签、同端互斥登录、会话治理、密码加密、jwt集成、Spring集成、WebFlux集成...","archived":false,"fork":false,"pushed_at":"2024-05-01T03:33:55.000Z","size":6258,"stargazers_count":15481,"open_issues_count":31,"forks_count":2501,"subscribers_count":152,"default_branch":"dev","last_synced_at":"2024-05-01T11:22:34.891Z","etag":null,"topics":["aouth2","authorization","java","springcloud","sso","token"],"latest_commit_sha":null,"homepage":"https://sa-token.cc","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/dromara.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-02-03T10:34:29.000Z","updated_at":"2024-05-03T09:35:18.004Z","dependencies_parsed_at":"2023-09-22T01:56:21.088Z","dependency_job_id":"12a4a744-ded5-4ce8-b62b-fd47e90e80df","html_url":"https://github.com/dromara/Sa-Token","commit_stats":{"total_commits":1128,"total_committers":103,"mean_commits":"10.951456310679612","dds":0.3014184397163121,"last_synced_commit":"fe52b05d8888e6592fa1ecd0b48410d1fb6ee55d"},"previous_names":[],"tags_count":31,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dromara%2FSa-Token","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dromara%2FSa-Token/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dromara%2FSa-Token/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dromara%2FSa-Token/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dromara","download_url":"https://codeload.github.com/dromara/Sa-Token/tar.gz/refs/heads/dev","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":221886000,"owners_count":16897938,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["aouth2","authorization","java","springcloud","sso","token"],"created_at":"2024-07-31T09:00:58.187Z","updated_at":"2025-03-24T16:31:04.372Z","avatar_url":"https://github.com/dromara.png","language":"Java","readme":"\u003cp align=\"center\"\u003e\n\t\u003cimg alt=\"logo\" src=\"https://sa-token.cc/logo.png\" width=\"150\" height=\"150\"\u003e\n\u003c/p\u003e\n\u003ch1 align=\"center\" style=\"margin: 30px 0 30px; font-weight: bold;\"\u003eSa-Token v1.41.0\u003c/h1\u003e\n\u003ch4 align=\"center\"\u003e一个轻量级 Java 权限认证框架，让鉴权变得简单、优雅！\u003c/h4\u003e\n\u003cp align=\"center\"\u003e\n\t\u003ca href=\"https://gitee.com/dromara/sa-token/stargazers\"\u003e\u003cimg src=\"https://gitee.com/dromara/sa-token/badge/star.svg?theme=gvp\"\u003e\u003c/a\u003e\n\t\u003ca href=\"https://gitee.com/dromara/sa-token/members\"\u003e\u003cimg src=\"https://gitee.com/dromara/sa-token/badge/fork.svg?theme=gvp\"\u003e\u003c/a\u003e\n\t\u003ca href=\"https://gitcode.com/dromara/sa-token/stargazers\"\u003e\u003cimg src=\"https://gitcode.com/dromara/Sa-Token/star/badge.svg\"\u003e\u003c/a\u003e\n\t\u003ca href=\"https://github.com/dromara/sa-token/stargazers\"\u003e\u003cimg src=\"https://img.shields.io/github/stars/dromara/sa-token?style=flat-square\u0026logo=GitHub\"\u003e\u003c/a\u003e\n\t\u003ca href=\"https://github.com/dromara/sa-token/network/members\"\u003e\u003cimg src=\"https://img.shields.io/github/forks/dromara/sa-token?style=flat-square\u0026logo=GitHub\"\u003e\u003c/a\u003e\n\t\u003ca href=\"https://github.com/dromara/sa-token/watchers\"\u003e\u003cimg src=\"https://img.shields.io/github/watchers/dromara/sa-token?style=flat-square\u0026logo=GitHub\"\u003e\u003c/a\u003e\n\t\u003c!-- \u003ca href=\"https://github.com/dromara/sa-token/issues\"\u003e\u003cimg src=\"https://img.shields.io/github/issues/dromara/sa-token.svg?style=flat-square\u0026logo=GitHub\"\u003e\u003c/a\u003e --\u003e\n\t\u003ca href=\"https://github.com/dromara/sa-token/blob/master/LICENSE\"\u003e\u003cimg src=\"https://img.shields.io/github/license/dromara/sa-token.svg?style=flat-square\"\u003e\u003c/a\u003e\n\u003c/p\u003e\n\u003c!-- \u003cp align=\"center\"\u003e学习测试请拉取 master 分支，dev 是在开发分支 (在根目录执行 `git checkout master`)\u003c/p\u003e --\u003e\n\u003cp align=\"center\"\u003e\u003ca href=\"https://sa-token.cc\" target=\"_blank\"\u003e在线文档：https://sa-token.cc\u003c/a\u003e\u003c/p\u003e\n\n\n---\n\n### Sa-Token 介绍\n\nSa-Token 是一个轻量级 Java 权限认证框架，目前拥有五大核心模块：登录认证、权限认证、单点登录、OAuth2.0、微服务鉴权。\n\n要在 SpringBoot 项目中使用 Sa-Token，你只需要在 pom.xml 中引入依赖：\n\n``` xml\n\u003c!-- Sa-Token 权限认证, 在线文档：https://sa-token.cc --\u003e\n\u003cdependency\u003e\n\t\u003cgroupId\u003ecn.dev33\u003c/groupId\u003e\n\t\u003cartifactId\u003esa-token-spring-boot-starter\u003c/artifactId\u003e\n\t\u003cversion\u003e1.41.0\u003c/version\u003e\n\u003c/dependency\u003e\n```\n\n除了 SpringBoot2、Sa-Token 还为 SpringBoot3、Solon、JFinal 等常见 Web 框架提供集成包，做到真正的开箱即用。\n\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003e简单示例展示：（点击展开 / 折叠）\u003c/b\u003e\u003c/summary\u003e\n\nSa-Token 旨在以简单、优雅的方式完成系统的权限认证部分，以登录认证为例，你只需要：\n\n``` java\n// 会话登录，参数填登录人的账号id \nStpUtil.login(10001);\n```\n\n无需实现任何接口，无需创建任何配置文件，只需要这一句静态代码的调用，便可以完成会话登录认证。\n\n如果一个接口需要登录后才能访问，我们只需调用以下代码：\n\n``` java\n// 校验当前客户端是否已经登录，如果未登录则抛出 `NotLoginException` 异常\nStpUtil.checkLogin();\n```\n\n在 Sa-Token 中，大多数功能都可以一行代码解决：\n\n踢人下线：\n\n``` java\n// 将账号id为 10077 的会话踢下线 \nStpUtil.kickout(10077);\n```\n\n权限认证：\n\n``` java\n// 注解鉴权：只有具备 `user:add` 权限的会话才可以进入方法\n@SaCheckPermission(\"user:add\")\npublic String insert(SysUser user) {\n    // ... \n    return \"用户增加\";\n}\n```\n\n路由拦截鉴权：\n\n``` java\n// 根据路由划分模块，不同模块不同鉴权 \nregistry.addInterceptor(new SaInterceptor(handler -\u003e {\n\tSaRouter.match(\"/user/**\", r -\u003e StpUtil.checkPermission(\"user\"));\n\tSaRouter.match(\"/admin/**\", r -\u003e StpUtil.checkPermission(\"admin\"));\n\tSaRouter.match(\"/goods/**\", r -\u003e StpUtil.checkPermission(\"goods\"));\n\tSaRouter.match(\"/orders/**\", r -\u003e StpUtil.checkPermission(\"orders\"));\n\tSaRouter.match(\"/notice/**\", r -\u003e StpUtil.checkPermission(\"notice\"));\n\t// 更多模块... \n})).addPathPatterns(\"/**\");\n```\n\n当你受够 Shiro、SpringSecurity 等框架的三拜九叩之后，你就会明白，相对于这些传统老牌框架，Sa-Token 的 API 设计是多么的简单、优雅！\n\n\u003c/details\u003e\n\n\n\u003cdetails\u003e\n\u003csummary\u003e \u003cb\u003e核心模块一览：（点击展开 / 折叠）\u003c/b\u003e \u003c/summary\u003e\n\n- **登录认证** —— 单端登录、多端登录、同端互斥登录、七天内免登录。\n- **权限认证** —— 权限认证、角色认证、会话二级认证。\n- **踢人下线** —— 根据账号id踢人下线、根据Token值踢人下线。\n- **注解式鉴权** —— 优雅的将鉴权与业务代码分离。\n- **路由拦截式鉴权** —— 根据路由拦截鉴权，可适配 restful 模式。\n- **Session会话** —— 全端共享Session,单端独享Session,自定义Session,方便的存取值。\n- **持久层扩展** —— 可集成 Redis，重启数据不丢失。\n- **前后台分离** —— APP、小程序等不支持 Cookie 的终端也可以轻松鉴权。\n- **Token风格定制** —— 内置六种 Token 风格，还可：自定义 Token 生成策略。\n- **记住我模式** —— 适配 [记住我] 模式，重启浏览器免验证。\n- **二级认证** —— 在已登录的基础上再次认证，保证安全性。 \n- **模拟他人账号** —— 实时操作任意用户状态数据。\n- **临时身份切换** —— 将会话身份临时切换为其它账号。\n- **同端互斥登录** —— 像QQ一样手机电脑同时在线，但是两个手机上互斥登录。\n- **账号封禁** —— 登录封禁、按照业务分类封禁、按照处罚阶梯封禁。\n- **密码加密** —— 提供基础加密算法，可快速 MD5、SHA1、SHA256、AES 加密。\n- **会话查询** —— 提供方便灵活的会话查询接口。\n- **Http Basic认证** —— 一行代码接入 Http Basic、Digest 认证。\n- **全局侦听器** —— 在用户登陆、注销、被踢下线等关键性操作时进行一些AOP操作。\n- **全局过滤器** —— 方便的处理跨域，全局设置安全响应头等操作。\n- **多账号体系认证** —— 一个系统多套账号分开鉴权（比如商城的 User 表和 Admin 表）\n- **单点登录** —— 内置三种单点登录模式：同域、跨域、同Redis、跨Redis、前后端分离等架构都可以搞定。\n- **单点注销** —— 任意子系统内发起注销，即可全端下线。\n- **OAuth2.0认证** —— 轻松搭建 OAuth2.0 服务，支持openid模式 。\n- **分布式会话** —— 提供共享数据中心分布式会话方案。\n- **微服务网关鉴权** —— 适配Gateway、ShenYu、Zuul等常见网关的路由拦截认证。\n- **RPC调用鉴权** —— 网关转发鉴权，RPC调用鉴权，让服务调用不再裸奔\n- **临时Token认证** —— 解决短时间的 Token 授权问题。\n- **独立Redis** —— 将权限缓存与业务缓存分离。\n- **Quick快速登录认证** —— 为项目零代码注入一个登录页面。\n- **标签方言** —— 提供 Thymeleaf 标签方言集成包，提供 beetl 集成示例。\n- **jwt集成** —— 提供三种模式的 jwt 集成方案，提供 token 扩展参数能力。\n- **RPC调用状态传递** —— 提供 dubbo、grpc 等集成包，在RPC调用时登录状态不丢失。\n- **参数签名** —— 提供跨系统API调用签名校验模块，防参数篡改，防请求重放。\n- **自动续签** —— 提供两种Token过期策略，灵活搭配使用，还可自动续签。\n- **开箱即用** —— 提供SpringMVC、WebFlux、Solon 等常见框架集成包，开箱即用。\n- **最新技术栈** —— 适配最新技术栈：支持 SpringBoot 3.x，jdk 17。\n\n\u003c/details\u003e\n\n\n![sa-token-js](https://color-test.oss-cn-qingdao.aliyuncs.com/sa-token/x/sa-token-js4.png)\n\n\n### SSO 单点登录\nSa-Token SSO 分为三种模式，解决同域、跨域、共享Redis、跨Redis、前后端一体、前后端分离……等不同架构下的 SSO 接入问题：\n\n| 系统架构\t\t\t\t\t\t| 采用模式\t| 简介\t\t\t\t\t\t|  文档链接\t|\n| :--------\t\t\t\t\t\t| :--------\t| :--------\t\t\t\t\t| :--------\t|\n| 前端同域 + 后端同 Redis\t\t\t| 模式一\t\t| 共享Cookie同步会话\t\t\t| [文档](https://sa-token.cc/doc.html#/sso/sso-type1)、[示例](https://gitee.com/dromara/sa-token/blob/master/sa-token-demo/sa-token-demo-sso1-client)\t|\n| 前端不同域 + 后端同 Redis\t\t| 模式二\t\t| URL重定向传播会话 \t\t\t| [文档](https://sa-token.cc/doc.html#/sso/sso-type2)、[示例](https://gitee.com/dromara/sa-token/blob/master/sa-token-demo/sa-token-demo-sso2-client)\t|\n| 前端不同域 + 后端 不同Redis\t\t| 模式三\t\t| Http请求获取会话\t\t\t| [文档](https://sa-token.cc/doc.html#/sso/sso-type3)、[示例](https://gitee.com/dromara/sa-token/blob/master/sa-token-demo/sa-token-demo-sso3-client)\t|\n\n\n1. 前端同域：就是指多个系统可以部署在同一个主域名之下，比如：`c1.domain.com`、`c2.domain.com`、`c3.domain.com`\n2. 后端同Redis：就是指多个系统可以连接同一个Redis。（此处并非要所有项目数据都放在一个Redis中，Sa-Token提供 **`[权限缓存与业务缓存分离]`** 的解决方案）\n3. 如果既无法做到前端同域，也无法做到后端同Redis，可以走模式三，Http请求校验 ticket 获取会话。\n4. 提供 NoSdk 模式示例，不使用 Sa-Token 的系统也可以对接。\n5. 提供 sso-server 接口文档，不使用 java 语言的系统也可以对接。\n6. 提供前后端分离整合方案：无论是 sso-server 还是 sso-client 的前后端分离都可以整合。\n7. 提供安全校验：域名校验、ticket校验、参数签名校验，有效防 ticket 劫持，防请求重放等攻击。\n8. 参数防丢：笔者曾试验多个SSO框架，均有参数丢失情况，比如登录前是：`http://a.com?id=1\u0026name=2`，登录成功后就变成了：`http://a.com?id=1`，Sa-Token-SSO 内有专门算法保证了参数不丢失，登录成功后精准原路返回。\n9. 提供用户数据同步/迁移方案的建议：开发前统一迁移、运行时实时数据同步、根据关联字段匹配、根据 center_id 字段匹配等。\n10. 提供直接可运行的 demo 示例，帮助你快速熟悉 SSO 大致登录流程。\n\n\n\n### OAuth2 授权认证\nSa-Token-OAuth2 模块分为四种授权模式，解决不同场景下的授权需求 \n\n| 授权模式\t\t\t\t\t\t| 简介\t\t\t\t\t\t|\n| :--------\t\t\t\t\t\t| :--------\t\t\t\t\t|\n| 授权码（Authorization Code）\t| OAuth2.0 标准授权步骤，Server 端向 Client 端下放 Code 码，Client 端再用 Code 码换取授权 Token\t\t\t|\n| 隐藏式（Implicit）\t\t\t\t| 无法使用授权码模式时的备用选择，Server 端使用 URL 重定向方式直接将 Token 下放到 Client 端页面 \t\t\t|\n| 密码式（Password）\t\t\t\t| Client直接拿着用户的账号密码换取授权 Token\t\t\t|\n| 客户端凭证（Client Credentials）| Server 端针对 Client 级别的 Token，代表应用自身的资源授权\t\t|\n\n详细参考文档：[https://sa-token.cc/doc.html#/oauth2/readme](https://sa-token.cc/doc.html#/oauth2/readme)\n\n\n### 开源集成案例\n\n- [[ Snowy ]](https://gitee.com/xiaonuobase/snowy)：国内首个国密前后分离快速开发平台，采用 Vue3 + AntDesignVue3 + Vite + SpringBoot + Mp + HuTool + SaToken。\n- [[ RuoYi-Vue-Plus ]](https://gitee.com/dromara/RuoYi-Vue-Plus)：重写RuoYi-Vue所有功能 集成 Sa-Token+Mybatis-Plus+Jackson+Xxl-Job+knife4j+Hutool+OSS 定期同步\n- [[Smart-Admin]](https://gitee.com/lab1024/smart-admin)：SmartAdmin国内首个以「高质量代码」为核心，「简洁、高效、安全」中后台快速开发平台；\n- [[ 灯灯 ]](https://gitee.com/dromara/lamp-cloud)： 专注于多租户解决方案的微服务中后台快速开发平台。租户模式支持独立数据库(DATASOURCE模式)、共享数据架构(COLUMN模式) 和 非租户模式(NONE模式)✨\n- [[ EasyAdmin ]](https://gitee.com/lakernote/easy-admin)：一个基于SpringBoot2 + Sa-Token + Mybatis-Plus + Snakerflow + Layui 的后台管理系统，灵活多变可前后端分离，也可单体，内置代码生成器、权限管理、工作流引擎等\n- [[ sa-admin-server ]](https://gitee.com/wlf213/sa-admin-server)： 基于 sa-admin-ui 的后台管理开发脚手架。\n\n\n还有更多优秀开源案例无法逐一展示，请参考：[Awesome-Sa-Token](https://gitee.com/sa-token/awesome-sa-token)\n\n\n### 友情链接\n- [[ OkHttps ]](https://gitee.com/ejlchina-zhxu/okhttps)：轻量级 http 通信框架，API无比优雅，支持 WebSocket、Stomp 协议\n- [[ Bean Searcher ]](https://github.com/ejlchina/bean-searcher)：专注高级查询的只读 ORM，使一行代码实现复杂列表检索！\n- [[ Jpom ]](https://gitee.com/dromara/Jpom)：简而轻的低侵入式在线构建、自动部署、日常运维、项目监控软件。\n- [[ TLog ]](https://gitee.com/dromara/TLog)：一个轻量级的分布式日志标记追踪神器。\n- [[ hippo4j ]](https://gitee.com/agentart/hippo4j)：强大的动态线程池框架，附带监控报警功能。\n- [[ hertzbeat ]](https://gitee.com/dromara/hertzbeat)：易用友好的开源实时监控告警系统，无需Agent，高性能集群，强大自定义监控能力。\n- [[ Solon ]](https://gitee.com/noear/solon)：一个更现代感的应用开发框架：更快、更小、更自由。\n- [[ Chat2DB ]](https://github.com/chat2db/Chat2DB)：一个AI驱动的数据库管理和BI工具，支持Mysql、pg、Oracle、Redis等22种数据库的管理。\n\n\n\n### 代码托管\n- Gitee：[https://gitee.com/dromara/sa-token](https://gitee.com/dromara/sa-token)\n- GitHub：[https://github.com/dromara/sa-token](https://github.com/dromara/sa-token)\n- GitCode：[https://gitcode.com/dromara/sa-token](https://gitcode.com/dromara/sa-token)\n\n\n\n### 交流群\n\u003c!-- QQ交流群：685792424 [点击加入](http://qm.qq.com/cgi-bin/qm/qr?_wv=1027\u0026k=Y05Ld4125W92YSwZ0gA8e3RhG9Q4Vsfx\u0026authKey=IomXuIuhP9g8G7l%2ByfkrRsS7i%2Fna0lIBpkTXxx%2BQEaz0NNEyJq00kgeiC4dUyNLS\u0026noverify=0\u0026group_code=685792424)--\u003e\n\nQQ交流群：823181187 [点击加入](https://qm.qq.com/q/EBIJVZBVGE) \n\n微信交流群：\n\n\u003c!-- \u003cimg src=\"https://oss.dev33.cn/sa-token/qr/wx-qr-m-400k.png\" width=\"230px\" title=\"微信群\" /\u003e --\u003e\n\n\u003cimg src=\"https://oss.dev33.cn/sa-token/qr/i-wx-qr2.png\" width=\"230px\" title=\"微信群\" /\u003e\n\n(扫码添加微信，备注：sa-token，邀您加入群聊)\n\n\u003cbr\u003e\n\n加入群聊的好处：\n- 第一时间收到框架更新通知。\n- 第一时间收到框架 bug 通知。\n- 第一时间收到新增开源案例通知。\n- 和众多大佬一起互相 (huá shuǐ) 交流 (mō yú)。\n\n","funding_links":[],"categories":["Java","Java 程序设计"],"sub_categories":["网络服务_其他"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdromara%2FSa-Token","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdromara%2FSa-Token","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdromara%2FSa-Token/lists"}