时间:2025-03-23 12:24
人气:
作者:admin
Sa-Token 是一个轻量级 Java 权限认证框架,主要解决:登录认证、权限认证、单点登录、OAuth2.0、微服务网关鉴权 等一系列权限相关问题。????
目前最新版本 v1.41.0 已推送至 Maven 中央仓库 ????,大家可以通过如下方式引入:
<!-- Sa-Token 权限认证 -->
<dependency>
<groupId>cn.dev33</groupId>
<artifactId>sa-token-spring-boot-starter</artifactId>
<version>1.41.0</version>
</dependency>
该版本包含大量 ⛏️️️新增特性、⛏️底层重构、⛏️️️代码优化 等,下面容我列举几条比较重要的更新内容供大家参阅:
本次更新针对防火墙新增了多条校验规则,之前的规则为:
本次新增规则为:
并且本次更新开放了 hooks 机制,允许开发者注册自定义的校验规则 ????️,参考如下:
@PostConstruct
public void saTokenPostConstruct() {
// 注册新 hook 演示,拦截所有带有 pwd 参数的请求,拒绝响应
SaFirewallStrategy.instance.registerHook((req, res, extArg)->{
if(req.getParam("pwd") != null) {
throw new FirewallCheckException("请求中不可包含 pwd 参数");
}
});
}
文档直达地址:Sa-Token 防火墙 ????
之前在 Sa-Token 中也有插件体系,不过都是利用 SpringBoot 的 SPI 机制完成组件注册的。
这种注册机制有一个问题,就是插件只能在 SpringBoot 环境下正常工作,在其它环境,比如 Solon 项目中,就只能手动注册插件才行 ????。
也就是说,严格来讲,这些插件只能算是 SpringBoot 的插件,而非 Sa-Token 框架的插件 ????。
为了提高插件的通用性,Sa-Token 设计了自己的 SPI 机制,使得这些插件可以在更多的项目环境下正常工作 ????。
第一步:实现插件注册类,此类需要 implements SaTokenPlugin 接口 ????????:
/**
* SaToken 插件安装:插件作用描述
*/
public class SaTokenPluginForXxx implements SaTokenPlugin {
@Override
public void install() {
// 书写需要在项目启动时执行的代码,例如:
// SaManager.setXxx(new SaXxxForXxx());
}
}
第二步:在项目的 resources\META-INF\satoken\ 文件夹下 ???? 创建 cn.dev33.satoken.plugin.SaTokenPlugin 文件,内容为该插件注册类的完全限定名:
cn.dev33.satoken.plugin.SaTokenPluginForXxx
这样便可以在项目启动时,被 Sa-Token 插件管理器加载到此插件,执行插件注册类的 install 方法,完成插件安装 ✅。
文档直达地址:Sa-Token 插件开发指南 ????
在之前的版本中,Redis 集成通常和具体的序列化方式耦合在一起,这不仅让 Redis 相关插件产生大量的重复冗余代码,也让大家在选择 Redis 插件时严重受限。⚠️
本次版本更新彻底重构了此模块,将数据读写与序列化操作分离,使其每一块都可以单独自定义实现类,做到灵活扩展 ✨,例如:
所有实现类均可以按需选择,自由搭配,大大提高灵活性????️。
SaLoginParameter (前SaLoginModel) 用于控制登录操作中的部分细节行为,本次新增的配置项有:
以上大部分配置项在之前的版本中也有支持,不过它们都被定义在了全局配置类 SaTokenConfig 之上,本次更新支持在 SaLoginParameter 中定义这些配置项,
这将让登录策略的控制变得更加灵活。✨
SaLogoutParameter 用于控制注销操作中的部分细节行为️,例如:
通过 Range 参数决定注销范围 ????:
// 注销范围: TOKEN=只注销当前 token 的会话,ACCOUNT=注销当前 token 指向的 loginId 其所有客户端会话
StpUtil.logout(new SaLogoutParameter().setRange(SaLogoutRange.TOKEN));
通过 DeviceType 参数决定哪些登录设备类型参与注销 ????:
// 指定 10001 账号,所有 PC 端注销下线,其它端如 APP 端不受影响
StpUtil.logout(10001, new SaLogoutParameter().setDeviceType("PC"));
还有其它参数此处暂不逐一列举,文档直达地址:Sa-Token 登录参数 & 注销参数 ????
StpUtil.setTokenValue("xxx")、loginParameter.getIsWriteHeader() 空指针的问题。这个没啥好说的,有 bug ???? 必须修复。
fix issue:#IBKSM0 ????
多应用模式就是指,允许在对接多个系统时分别使用不同的秘钥等配置项,配置示例如下 ????:
sa-token:
# API 签名配置 多应用模式
sign-many:
# 应用1
xm-shop:
secret-key: 0123456789abcdefg
digest-algo: md5
# 应用2
xm-forum:
secret-key: 0123456789hijklmnopq
digest-algo: sha256
# 应用3
xm-video:
secret-key: 12341234aaaaccccdddd
digest-algo: sha512
然后在签名时通过指定 appid 的方式获取对应的 SignTemplate 进行操作 ????????:
// 创建签名示例
String paramStr = SaSignMany.getSignTemplate("xm-shop").addSignParamsAndJoin(paramMap);
// 校验签名示例
SaSignMany.getSignTemplate("xm-shop").checkRequest(SaHolder.getRequest());
Caffeine 是一个基于 Java 的高性能本地缓存库,本次新增 sa-token-caffeine 插件用于将 Caffeine 作为 Sa-Token 的缓存层,存储会话鉴权数据。????
这进一步丰富了 Sa-Token 的缓存层插件生态。????
<!-- Sa-Token 整合 Caffeine -->
<dependency>
<groupId>cn.dev33</groupId>
<artifactId>sa-token-caffeine</artifactId>
<version>1.41.0</version>
</dependency>
引入此插件可以为 Sa-Token 提供一些有意思的序列化方案。(娱乐向,不建议上生产 ????)
例如:以base64 编码,采用:元素周期表 ????、特殊符号 ????、或 emoji ???? 作为元字符集存储数据 :




除了以上提到的几点以外,还有更多更新点无法逐一详细介绍,下面是 v1.41.0 版本的完整更新日志:
StpUtil.setTokenValue("xxx")、loginParameter.getIsWriteHeader() 空指针的问题。 fix: #IBKSM0SaDisableWrapperInfo.createNotDisabled() 默认返回值封禁等级改为 -2,以保证向之前版本兼容。Object 与 String 的序列化方式。 [重要]SaTokenDao 模块,将序列化与存储操作分离。 [重要]SaTokenDao 默认实现类,优化底层设计。isLastingCookie 配置项支持在全局配置中定义了。SaLoginModel -> SaLoginParameter。 [不向下兼容]TokenSign -> SaTerminalInfo。 [不向下兼容]SaTerminalInfo 新增 extraData 自定义扩展数据设置。SaLoginParameter 支持配置 isConcurrent、isShare、maxLoginCount、maxTryTimes。SaLogoutParameter,用于控制注销会话时的各种细节。 [重要]StpLogic#isTrustDeviceId 方法,用于判断指定设备是否为可信任设备。StpUtil.getTerminalListByLoginId(loginId)、StpUtil.forEachTerminalList(loginId) 方法,以更方便的实现单账号会话管理。@SaCheckSign 注解鉴权,用于 API 签名参数校验。is-share 默认值改为 false。 [不向下兼容]BCrypt 标注为 @Deprecated。sa-token-quick-login 支持 SpringBoot3 项目。 fix: #IAFQNE、#673SaTokenConfig 新增 replacedRange、overflowLogoutMode、logoutRange、isLogoutKeepFreezeOps、isLogoutKeepTokenSession 配置项。sa-token-serializer-features 插件,用于实现各种形式的自定义字符集序列化方案。sa-token-fastjson 插件。sa-token-fastjson2 插件。sa-token-snack3 插件。sa-token-caffeine 插件。sa-token-json-test json 模块单元测试。sa-token-serializer-test 序列化模块单元测试。preview-doc.bat 文件,一键启动文档预览。sa-token-demo/pom.xml 以便在 idea 中一键导入所有 demo 项目。.gitignore 文件sa-token-solon-plugin 插件。更新日志在线文档直达链接:https://sa-token.cc/doc.html#/more/update-log
代码仓库地址:https://gitee.com/dromara/sa-token
框架功能结构图:

上一篇:JTS 介绍