百度360必应搜狗淘宝本站头条
当前位置:网站首页 > IT知识 > 正文

Sa-Token v1.42.0 发布,新增 API Key、TOTP 验证码等能力

liuian 2025-09-18 03:45 17 浏览

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 注册新增 registerHookToFirstregisterHookToSecond 方法,以便更灵活的控制 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

相关推荐

搭建一个20人的办公网络(适用于20多人的小型办公网络环境)

楼主有5台机上网,则需要一个8口路由器,组网方法如下:设备:1、8口路由器一台,其中8口为LAN(局域网)端口,一个WAN(广域网)端口,价格100--400元2、网线N米,这个你自己会看了:)...

笔记本电脑各种参数介绍(笔记本电脑各项参数新手普及知识)

1、CPU:这个主要取决于频率和二级缓存,频率越高、二级缓存越大,速度越快,现在的CPU有三级缓存、四级缓存等,都影响相应速度。2、内存:内存的存取速度取决于接口、颗粒数量多少与储存大小,一般来说,内...

汉字上面带拼音输入法下载(字上面带拼音的输入法是哪个)

使用手机上的拼音输入法打成汉字的方法如下:1.打开手机上的拼音输入法,在输入框中输入汉字的拼音,例如“nihao”。2.根据输入法提示的候选词,选择正确的汉字。例如,如果输入“nihao”,输...

xpsp3安装版系统下载(windowsxpsp3安装教程)

xpsp3纯净版在采用微软封装部署技术的基础上,结合作者的实际工作经验,融合了许多实用的功能。它通过一键分区、一键装系统、自动装驱动、一键设定分辨率,一键填IP,一键Ghost备份(恢复)等一系列...

没有备份的手机数据怎么恢复

手机没有备份恢复数据方法如下1、使用数据线将手机与电脑连接好,在“我的电脑”中可以看到手机的盘符。  2、将手机开启USB调试模式。在手机设置中找到开发者选项,然后点击“开启USB调试模式”。  3、...

电脑怎么激活windows11专业版

win11专业版激活方法有多种,以下提供两种常用的激活方式:方法一:使用激活密钥激活。在win11桌面上右键点击“此电脑”,选择“属性”选项。进入属性页面后,点击“更改产品密钥或升级windows”。...

华为手机助手下载官网(华为手机助手app下载专区)

华为手机助手策略调整,已不支持从应用市场下载手机助手,目前华为手机助手是需要在电脑上下载或更新手机助手到最新版本,https://consumer.huawei.com/cn/support/his...

光纤线断了怎么接(宽带光纤线断了怎么接)

宽带光纤线断了可以重接,具体操作方法如下:1、光纤连接的时候要根据束管内,同色相连,同芯相连,按顺序进行连接,由大到小。一般有三种连接方法,分别是熔接、活动连接和机械连接。2、连接的时候要开剥光缆,抛...

深度操作系统安装教程(深度操作系统安装教程图解)
  • 深度操作系统安装教程(深度操作系统安装教程图解)
  • 深度操作系统安装教程(深度操作系统安装教程图解)
  • 深度操作系统安装教程(深度操作系统安装教程图解)
  • 深度操作系统安装教程(深度操作系统安装教程图解)
win7旗舰版和专业版区别(win7旗舰版跟专业版)

1、功能区别:Win7旗舰版比专业版多了三个功能,分别是Bitlocker、BitlockerToGo和多语言界面; 2、用途区别:旗舰版的功能是所有版本中最全最强大的,占用的系统资源,...

万能连接钥匙(万能wifi连接钥匙下载)

1、首先打开wifi万能钥匙软件,若手机没有开启WLAN,就根据软件提示打开WLAN开关;2、打开WLAN开关后,会显示附近的WiFi,如果知道密码,可点击相应WiFi后点击‘输入密码’连接;3、若不...

雨林木风音乐叫什么(雨林木风是啥)

雨林木风的创始人是陈年鑫先生。陈年鑫先生于1999年创立了雨林木风公司,其初衷是为满足中国市场对高品质、高性能电脑的需求。在陈年鑫先生的领导下,雨林木风以技术创新、产品质量和客户服务为核心价值,不断推...

aics6序列号永久序列号(aics6破解序列号)

关于AICS6这个版本,虽然是比较久远的版本,但是在功能上也是十分全面和强大的,作为一名平面设计师的话,AICS6的现有的功能已经能够应付几乎所有的设计工作了……到底AICC2019的功能是不是...

win7正在启动windows 卡住(win7正在启动windows卡住了 进入安全模式)
  • win7正在启动windows 卡住(win7正在启动windows卡住了 进入安全模式)
  • win7正在启动windows 卡住(win7正在启动windows卡住了 进入安全模式)
  • win7正在启动windows 卡住(win7正在启动windows卡住了 进入安全模式)
  • win7正在启动windows 卡住(win7正在启动windows卡住了 进入安全模式)
手机可以装电脑系统吗(手机可以装电脑系统吗怎么装)

答题公式1:手机可以通过数据线或无线连接的方式给电脑装系统。手机安装系统需要一定的技巧和软件支持,一般需要通过数据线或无线连接的方式与电脑连接,并下载相应的软件和系统文件进行安装。对于大部分手机用户来...