一个轻量级 Java 权限认证框架,让鉴权变得简单、优雅!—— 登录认证、权限认证、分布式Session会话、微服务网关鉴权、SSO 单点登录、OAuth2.0 统一认证
Go to file
2022-02-10 01:35:09 +08:00
.gitee 更改issues模板 2021-09-11 19:09:04 +08:00
.github 更改issues模板 2021-09-11 19:09:04 +08:00
sa-token-core v1.29.0更新 2022-02-10 01:35:09 +08:00
sa-token-demo v1.29.0更新 2022-02-10 01:35:09 +08:00
sa-token-doc v1.29.0更新 2022-02-10 01:35:09 +08:00
sa-token-plugin v1.29.0更新 2022-02-10 01:35:09 +08:00
sa-token-starter v1.29.0更新 2022-02-10 01:35:09 +08:00
sa-token-test v1.29.0更新 2022-02-10 01:35:09 +08:00
.gitignore v1.23.0 更新 2021-07-19 01:23:35 +08:00
LICENSE v1.23.0 更新 2021-07-19 01:23:35 +08:00
mvn clean.bat v1.29.0更新 2022-02-10 01:35:09 +08:00
pom.xml v1.29.0更新 2022-02-10 01:35:09 +08:00
README.md v1.29.0更新 2022-02-10 01:35:09 +08:00

logo

Sa-Token v1.29.0

一个轻量级 Java 权限认证框架,让鉴权变得简单、优雅!


前言:

Sa-Token 介绍

Sa-Token 是一个轻量级 Java 权限认证框架,主要解决:登录认证权限认证Session会话单点登录OAuth2.0微服务网关鉴权 等一系列权限相关问题。

Sa-Token 的 API 设计非常简单,有多简单呢?以登录认证为例,你只需要:

// 在登录时写入当前会话的账号id
StpUtil.login(10001);

// 然后在需要校验登录处调用以下方法:
// 如果当前会话未登录,这句代码会抛出 `NotLoginException` 异常
StpUtil.checkLogin();

至此,我们已经借助 Sa-Token 完成登录认证!

此时的你小脑袋可能飘满了问号,就这么简单?自定义 Realm 呢?全局过滤器呢?我不用写各种配置文件吗?

没错,在 Sa-Token 中登录认证就是如此简单不需要任何的复杂前置工作只需这一行简单的API调用就可以完成会话登录认证

当你受够 Shiro、SpringSecurity 等框架的三拜九叩之后你就会明白相对于这些传统老牌框架Sa-Token 的 API 设计是多么的简单、优雅!

权限认证示例(只有具备 user:add 权限的会话才可以进入请求)

@SaCheckPermission("user:add")
@RequestMapping("/user/insert")
public String insert(SysUser user) {
	// ... 
	return "用户增加";
}

将某个账号踢下线(待到对方再次访问系统时会抛出NotLoginException异常)

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

在 Sa-Token 中,绝大多数功能都可以 一行代码 完成:

StpUtil.login(10001);    // 标记当前会话登录的账号id
StpUtil.getLoginId();    // 获取当前会话登录的账号id
StpUtil.isLogin();    // 获取当前会话是否已经登录, 返回true或false
StpUtil.logout();    // 当前会话注销登录
StpUtil.kickout(10001);    // 将账号为10001的会话踢下线
StpUtil.hasRole("super-admin");    // 查询当前账号是否含有指定角色标识, 返回true或false
StpUtil.hasPermission("user:add");    // 查询当前账号是否含有指定权限, 返回true或false
StpUtil.getSession();    // 获取当前账号id的Session
StpUtil.getSessionByLoginId(10001);    // 获取账号id为10001的Session
StpUtil.getTokenValueByLoginId(10001);    // 获取账号id为10001的token令牌值
StpUtil.login(10001, "PC");    // 指定设备标识登录,常用于“同端互斥登录”
StpUtil.kickout(10001, "PC");    // 指定账号指定设备标识踢下线 (不同端不受影响)
StpUtil.openSafe(120);    // 在当前会话开启二级认证有效期为120秒 
StpUtil.checkSafe();    // 校验当前会话是否处于二级认证有效期内,校验失败会抛出异常 
StpUtil.switchTo(10044);    // 将当前会话身份临时切换为其它账号 

即使不运行测试,相信您也能意会到绝大多数 API 的用法。

Sa-Token 功能一览

  • 登录认证 —— 单端登录、多端登录、同端互斥登录、七天内免登录
  • 权限认证 —— 权限认证、角色认证、会话二级认证
  • Session会话 —— 全端共享Session、单端独享Session、自定义Session
  • 踢人下线 —— 根据账号id踢人下线、根据Token值踢人下线
  • 账号封禁 —— 指定天数封禁、永久封禁、设定解封时间
  • 持久层扩展 —— 可集成Redis、Memcached等专业缓存中间件重启数据不丢失
  • 分布式会话 —— 提供jwt集成、共享数据中心两种分布式会话方案
  • 微服务网关鉴权 —— 适配Gateway、ShenYu、Zuul等常见网关的路由拦截认证
  • 单点登录 —— 内置三种单点登录模式无论是否跨域、是否共享Redis都可以搞定
  • OAuth2.0认证 —— 基于RFC-6749标准编写OAuth2.0标准流程的授权认证支持openid模式
  • 二级认证 —— 在已登录的基础上再次认证,保证安全性
  • Basic认证 —— 一行代码接入 Http Basic 认证
  • 独立Redis —— 将权限缓存与业务缓存分离
  • 临时Token验证 —— 解决短时间的Token授权问题
  • 模拟他人账号 —— 实时操作任意用户状态数据
  • 临时身份切换 —— 将会话身份临时切换为其它账号
  • 前后台分离 —— APP、小程序等不支持Cookie的终端
  • 同端互斥登录 —— 像QQ一样手机电脑同时在线但是两个手机上互斥登录
  • 多账号认证体系 —— 比如一个商城项目的user表和admin表分开鉴权
  • 花式token生成 —— 内置六种Token风格还可自定义Token生成策略、自定义Token前缀
  • 注解式鉴权 —— 优雅的将鉴权与业务代码分离
  • 路由拦截式鉴权 —— 根据路由拦截鉴权可适配restful模式
  • 自动续签 —— 提供两种Token过期策略灵活搭配使用还可自动续签
  • 会话治理 —— 提供方便灵活的会话查询接口
  • 记住我模式 —— 适配[记住我]模式,重启浏览器免验证
  • 密码加密 —— 提供密码加密模块可快速MD5、SHA1、SHA256、AES、RSA加密
  • 全局侦听器 —— 在用户登陆、注销、被踢下线等关键性操作时进行一些AOP操作
  • 开箱即用 —— 提供SpringMVC、WebFlux等常见web框架starter集成包真正的开箱即用
  • 更多功能正在集成中... —— 如有您有好想法或者建议,欢迎加群交流

Sa-Token-SSO 单点登录

网上的单点登录教程大多以CAS流程为主其实对于不同的系统架构实现单点登录的步骤也大为不同Sa-Token由简入难将其划分为三种模式

系统架构 采用模式 简介 文档链接
前端同域 + 后端同 Redis 模式一 共享Cookie同步会话 文档示例
前端不同域 + 后端同 Redis 模式二 URL重定向传播会话 文档示例
前端不同域 + 后端 不同Redis 模式三 Http请求获取会话 文档示例
  1. 前端同域:就是指多个系统可以部署在同一个主域名之下,比如:c1.domain.comc2.domain.comc3.domain.com
  2. 后端同Redis就是指多个系统可以连接同一个Redis。PS这里并不需要把所有项目的数据都放在同一个Redis中Sa-Token提供了 [权限缓存与业务缓存分离] 的解决方案,详情戳:Alone独立Redis插件
  3. 如果既无法做到前端同域也无法做到后端同Redis那么只能走模式三Http请求获取会话Sa-Token对SSO提供了完整的封装你只需要按照示例从文档上复制几段代码便可以轻松集成
  4. 技术选型一定要根据系统架构对症下药,切不可胡乱选择

Sa-Token-OAuth2.0 授权登录

Sa-OAuth2 模块基于 RFC-6749 标准 编写通过Sa-OAuth2你可以非常轻松的实现系统的OAuth2.0授权认证

授权模式 简介
授权码Authorization Code OAuth2.0 标准授权步骤Server 端向 Client 端下放 Code 码Client 端再用 Code 码换取授权 Token
隐藏式Implicit 无法使用授权码模式时的备用选择Server 端使用 URL 重定向方式直接将 Token 下放到 Client 端页面
密码式Password Client直接拿着用户的账号密码换取授权 Token
客户端凭证Client Credentials Server 端针对 Client 级别的 Token代表应用自身的资源授权

详细参考文档:http://sa-token.dev33.cn/doc/index.html#/oauth2/readme

Sa-Token 功能结构图

sa-token-js

sa-token-rz

Star 趋势

giteye-chart

github-chart

使用Sa-Token的开源项目

如果您的项目使用了Sa-Token欢迎提交pr

友情链接

贡献者名单

感谢每一个为 Sa-Token 贡献代码的小伙伴

Giteye chart

交流群

QQ交流群1群1002350610 (已满) 、 2群614714762 点击加入

微信交流群:

微信群

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