Sa-Token v1.42.0 发布,新增 API Key、TOTP 验证码等能力
wptr33 2025-05-02 21:37 11 浏览
Sa-Token 是一款 免费、开源 的轻量级 Java 权限认证框架,主要解决:登录认证、权限认证、单点登录、OAuth2.0、微服务网关鉴权 等一系列权限相关问题。
目前最新版本 v1.42.0 已推送至 Maven 中央仓库 ,大家可以通过如下方式引入:
<!-- Sa-Token 权限认证 -->
<dependency>
<groupId>cn.dev33</groupId>
<artifactId>sa-token-spring-boot-starter</artifactId>
<version>1.42.0</version>
</dependency>
该版本包含大量 新增特性、底层重构、代码优化 等,下面容我列举几条比较重要的更新内容供大家参阅:
更新点1:新增 API Key 模块
如果你曾经对接过 ChatGPT、DeepSeek 等大模型平台的开放接口,那你一定对 API Key 不陌生。
API Key 是一种接口调用密钥,类似于会话 token ,但比会话 token 具有更灵活的权限控制。
本次更新带来了 API Key 的全流程管理,支持为指定账号签发、校验、禁用、删除 API Key 。
同时每个 API Key 都可以单独设置不同的 scope 权限,以便在不同的场景下使用不同的 API Key,做到秘钥相互隔离,最小化授权。
为了更好的展示此模块的能力,我们专门制作了一个 demo 示例:
sa-api-key
示例仓库地址:sa-token-demo-apikey
在这个示例中,你可以登录测试不同的账号,并为它们签发 API Key,设置 scope 权限,并使用不同的 API Key 测试调用接口,观察响应结果。
框架默认将所有 API Key 信息保存在缓存中,这可以称之为“缓存模式”,在这种模式下,重启缓存库后,数据将会丢失。
框架预留了 SaApiKeyDataLoader 接口,以便你将数据的加载切换为 “数据库模式”,做到数据长久有效保存。
在线文档直达地址:API Key 接口调用秘钥
更新点2:重构 TempToken 模块新增 value 反查机制
在 Sa-Token 文档中有一段这样的示例:
sa-refresh-token
该示例演示了如何通过临时 Token 认证模块,创建 RefreshToken 为登录会话做到双 Token 的效果。
但是有一天我在官网 sa-token 小助手接收到一位用户的咨询:
sa-refresh-token-wnglian-zixun
该用户指出,是否可以为 RefreshToken 提供反查机制,以便获取某个账号历史签发的 全部 RefreshToken。
必须安排!
此次版本更新,允许程序在创建 refresh-token 时,指定第三个参数,该参数表示是否允许框架记录 Token 索引信息:
SaTempUtil.createToken("10001", 2592000, true);
指定为 false 代表不记录索引,只生成 token,指定为 true 代表记录索引信息,以便日后可以通过 value 反查历史签发的所有 token。
例如我们可以通过 SaTempUtil.getTempTokenList("xxx") 方法获取指定账号所有历史签发的 RefreshToken 记录:
List<String> refreshTokenList = SaTempUtil.getTempTokenList("10001");
在线文档直达地址:临时 Token 令牌认证
更新点3:新增 TOTP 算法实现
TOTP 是一种动态密码算法,用于生成短暂有效的数字验证码(通常6-8位)。它的核心原理是:结合密钥与当前时间,通过哈希运算生成一次性密码。
TOTP 一般有以下应用场景:
- o 1、登录时的双因子认证:用户输入账号密码后还需要再输入 TOTP 验证码才可以登录成功。
- o 2、敏感操作的二次认证:用户在进行一些高危敏感操作时,需要输入 TOTP 验证码才可以继续操作。
- o 3、替代短信验证码:TOTP 验证码无需网络,可离线计算生成,一定程度上可以替代短信验证码验证身份。
本次版本新增了 TOTP 验证码的生成与校验功能,这将方便大家为自己的系统添加双因子认证能力。
更新点4:重构升级SaTokenContext上下文读写策略
这可能是近几个版本中最底层的一次重构,几乎完全推翻了之前上下文模块的设计。
在之前的版本中,Sa-Token 对接不同的 Web 框架需要利用这些 Web 框架的原生上下文能力来构建 Sa-Token 的上下文。
本次更新 Sa-Token 利用 ThreadLocal 实现了自己的上下文存储机制,这将带来以下好处:
- o 1、可以更方便、更简单的对接更多的 Web 框架。
- o 2、可在异步场景中临时 Mock 一个上下文,调用 Sa-Token 框架同步 API。
- o 3、彻底删除了二级上下文模块,做到了 Web 请求与 RPC 请求的上下文统一。
- o 4、在防火墙 hook 里也可以调用 Sa-Token 同步 API 了。
更新点5:新增CORS跨域策略处理函数,提供不同架构下统一的跨域处理方案
在之前的版本中,跨域处理总是要写在全局鉴权过滤器中,属于“鉴权之下的额外补充操作”。
新版本专门提供了一个 CORS 跨域处理策略组件,以后再也不用仅仅为了跨域就书写一个长长的鉴权过滤器组件了。
/**
* CORS 跨域处理
*/
@Bean
public SaCorsHandleFunction corsHandle() {
return (req, res, sto) -> {
res.
// 允许指定域访问跨域资源
setHeader("Access-Control-Allow-Origin", "*")
// 允许所有请求方式
.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE")
// 有效时间
.setHeader("Access-Control-Max-Age", "3600")
// 允许的header参数
.setHeader("Access-Control-Allow-Headers", "*");
// 如果是预检请求,则立即返回到前端
SaRouter.match(SaHttpMethod.OPTIONS)
.free(r -> System.out.println("--------OPTIONS预检请求,不做处理"))
.back();
};
}
开源仓库示例:sa-token-demo-cross
更新点6:sa-token-quick-login插件支持Http Basic方式通过认证
sa-token-quick-login 可以快速、方便的为项目注入一个登录页面,当我们引入依赖后:
<dependency>
<groupId>cn.dev33</groupId>
<artifactId>sa-token-quick-login</artifactId>
<version>1.42.0</version>
</dependency>
启动类:
@SpringBootApplication
public class SaTokenQuickDemoApplication {
public static void main(String[] args) {
SpringApplication.run(SaTokenQuickDemoApplication.class, args);
System.out.println("\n------ 启动成功 ------");
System.out.println("name: " + SaQuickManager.getConfig().getName());
System.out.println("pwd: " + SaQuickManager.getConfig().getPwd());
}
}
测试 Controller
@RestController
public class TestController {
@RequestMapping({"/", "/index"})
public String index() {
String str = "<br />"
+ "<h1 style='text-align: center;'>资源页 (登录后才可进入本页面) </h1>"
+ "<hr/>"
+ "<p style='text-align: center;'> Sa-Token " + SaTokenConsts.VERSION_NO + " </p>";
return str;
}
}
启动项目,使用浏览器访问:http://localhost:8081,首次访问时,由于处于未登录状态,会被强制进入登录页面 :
登录
使用默认账号:sa / 123456进行登录,会看到资源页面
登录
新版本中更新了通过 Http Basic 的方式直接进行认证的能力:
http://sa:123456@localhost:8081/
这将非常有助于大家在专门的 API 测试工具下进行 quick-login 相关资源接口的测试。
完整更新日志
除了以上提到的几点以外,还有更多更新点无法逐一详细介绍,下面是 v1.42.0 版本的完整更新日志:
- o core:
- o 新增: 新增 API Key 模块。 [重要]
- o 新增: 新增 TOTP 实现。 [重要]
- o 重构:重构 TempToken 模块,新增 value 反查 token 机制。 [重要]
- o 升级: 重构升级 SaTokenContext 上下文读写策略。 [重要]
- o 新增: 新增 Mock 上下文模块。 [重要]
- o 删除: 删除二级上下文模块。
- o 新增: 新增异步场景使用 demo。 [重要]
- o 新增: 新增 Base32 编码工具类。
- o 新增:新增 CORS 跨域策略处理函数,提供不同架构下统一的跨域处理方案。
- o 新增:renewTimeout 续期方法增加 token 终端信息有效性校验。
- o 新增: 全局配置项 cookieAutoFillPrefix:cookie 模式是否自动填充 token 前缀。
- o 新增: 全局配置项 rightNowCreateTokenSession:在登录时,是否立即创建对应的 Token-Session。
- o 优化:优化 Token-Session 获取算法,减少缓存读取次数。
- o 新增:SaLoginParameter 支持配置 SaCookieConfig,以配置 Cookie 相关参数。
- o 修改:防火墙校验过滤器的注册顺序 修改为 -102。
- o 新增:防火墙 hook 注册新增 registerHookToFirst、registerHookToSecond 方法,以便更灵活的控制 hook 顺序。
- o 插件:
- o 新增: sa-token-quick-login 插件支持 Http Basic 方式通过认证。
- o 单元测试:
- o 补全:补全 Temp Token 模块单元测试。
- o 文档:
- o 补全:补全赞助者名单。
- o 修复:修复 Thymeleaf 集成文档不正确的依赖示例说明。
- o 修复:修复 unionid 章节错误描述。
- o 优化:采用更细致的描述优化SSO模式三单点注销步骤。
- o 新增:登录认证文档添加 Cookie 查看步骤演示图。
- o 新增:多账号模式新增注意点:运行时不可更改 LoginType。
- o 新增: 多账号模式QA:在一个接口里获取是哪个体系的账号正在登录。
- o 新增:新增QA:解决低版本 SpringBoot (<2.2.0) 引入 Sa-Token 报错的问题。
- o 新增:新增QA:前后端一体项目下,在拦截未登录进入登录页面时,如何登录完成后原路返回?
- o 新增:新增QA:Sa-Token 集成 Redis 如何集群?
- o 新增:新增QA:如何自定义框架读取 token 的方式?
- o 新增:新增QA:修改 hosts 文件无效可能原因排查。
- o 新增:新增QA:如何防止 CSRF 攻击。
- o 新增: “异步 & Mock 上下文” 章节。
- o 升级:升级“自定义 SaTokenContext 指南”章节文档。
更新日志在线文档直达链接:https://sa-token.cc/doc.html#/more/update-log
其它
代码仓库地址:https://gitee.com/dromara/sa-token
框架功能结构图:
js
相关推荐
- Python自动化脚本应用与示例(python办公自动化脚本)
-
Python是编写自动化脚本的绝佳选择,因其语法简洁、库丰富且跨平台兼容性强。以下是Python自动化脚本的常见应用场景及示例,帮助你快速上手:一、常见自动化场景文件与目录操作...
- Python文件操作常用库高级应用教程
-
本文是在前面《Python文件操作常用库使用教程》的基础上,进一步学习Python文件操作库的高级应用。一、高级文件系统监控1.1watchdog库-实时文件系统监控安装与基本使用:...
- Python办公自动化系列篇之六:文件系统与操作系统任务
-
作为高效办公自动化领域的主流编程语言,Python凭借其优雅的语法结构、完善的技术生态及成熟的第三方工具库集合,已成为企业数字化转型过程中提升运营效率的理想选择。该语言在结构化数据处理、自动化文档生成...
- 14《Python 办公自动化教程》os 模块操作文件与文件夹
-
在日常工作中,我们经常会和文件、文件夹打交道,比如将服务器上指定目录下文件进行归档,或将爬虫爬取的数据根据时间创建对应的文件夹/文件,如果这些还依靠手动来进行操作,无疑是费时费力的,这时候Pyt...
- python中os模块详解(python os.path模块)
-
os模块是Python标准库中的一个模块,它提供了与操作系统交互的方法。使用os模块可以方便地执行许多常见的系统任务,如文件和目录操作、进程管理、环境变量管理等。下面是os模块中一些常用的函数和方法:...
- 21-Python-文件操作(python文件的操作步骤)
-
在Python中,文件操作是非常重要的一部分,它允许我们读取、写入和修改文件。下面将详细讲解Python文件操作的各个方面,并给出相应的示例。1-打开文件...
- 轻松玩转Python文件操作:移动、删除
-
哈喽,大家好,我是木头左!Python文件操作基础在处理计算机文件时,经常需要执行如移动和删除等基本操作。Python提供了一些内置的库来帮助完成这些任务,其中最常用的就是os模块和shutil模块。...
- Python 初学者练习:删除文件和文件夹
-
在本教程中,你将学习如何在Python中删除文件和文件夹。使用os.remove()函数删除文件...
- 引人遐想,用 Python 获取你想要的“某个人”摄像头照片
-
仅用来学习,希望给你们有提供到学习上的作用。1.安装库需要安装python3.5以上版本,在官网下载即可。然后安装库opencv-python,安装方式为打开终端输入命令行。...
- Python如何使用临时文件和目录(python目录下文件)
-
在某些项目中,有时候会有大量的临时数据,比如各种日志,这时候我们要做数据分析,并把最后的结果储存起来,这些大量的临时数据如果常驻内存,将消耗大量内存资源,我们可以使用临时文件,存储这些临时数据。使用标...
- Linux 下海量文件删除方法效率对比,最慢的竟然是 rm
-
Linux下海量文件删除方法效率对比,本次参赛选手一共6位,分别是:rm、find、findwithdelete、rsync、Python、Perl.首先建立50万个文件$testfor...
- Python 开发工程师必会的 5 个系统命令操作库
-
当我们需要编写自动化脚本、部署工具、监控程序时,熟练操作系统命令几乎是必备技能。今天就来聊聊我在实际项目中高频使用的5个系统命令操作库,这些可都是能让你效率翻倍的"瑞士军刀"。一...
- Python常用文件操作库使用详解(python文件操作选项)
-
Python生态系统提供了丰富的文件操作库,可以处理各种复杂的文件操作需求。本教程将介绍Python中最常用的文件操作库及其实际应用。一、标准库核心模块1.1os模块-操作系统接口主要功能...
- 11. 文件与IO操作(文件io和网络io)
-
本章深入探讨Go语言文件处理与IO操作的核心技术,结合高性能实践与安全规范,提供企业级解决方案。11.1文件读写11.1.1基础操作...
- Python os模块的20个应用实例(python中 import os模块用法)
-
在Python中,...
- 一周热门
-
-
C# 13 和 .NET 9 全知道 :13 使用 ASP.NET Core 构建网站 (1)
-
因果推断Matching方式实现代码 因果推断模型
-
git pull命令使用实例 git pull--rebase
-
面试官:git pull是哪两个指令的组合?
-
git 执行pull错误如何撤销 git pull fail
-
git pull 和git fetch 命令分别有什么作用?二者有什么区别?
-
git fetch 和git pull 的异同 git中fetch和pull的区别
-
git pull 之后本地代码被覆盖 解决方案
-
还可以这样玩?Git基本原理及各种骚操作,涨知识了
-
git命令之pull git.pull
-
- 最近发表
- 标签列表
-
- git pull (33)
- git fetch (35)
- mysql insert (35)
- mysql distinct (37)
- concat_ws (36)
- java continue (36)
- jenkins官网 (37)
- mysql 子查询 (37)
- python元组 (33)
- mybatis 分页 (35)
- vba split (37)
- redis watch (34)
- python list sort (37)
- nvarchar2 (34)
- mysql not null (36)
- hmset (35)
- python telnet (35)
- python readlines() 方法 (36)
- munmap (35)
- docker network create (35)
- redis 集合 (37)
- python sftp (37)
- setpriority (34)
- c语言 switch (34)
- git commit (34)