Sa-Token:17.5k Star!轻量级Java权限认证框架,登录鉴权超简单
最近在折腾一个中台项目,遇到权限管理这块儿,真是差点把我整崩溃。之前用过 Shiro、SpringSecurity,讲真,功能是全,但配置起来跟开盲盒一样,一不小心就踩坑。
后来朋友推荐了个小巧精悍的 Sa-Token,我一开始还有点怀疑:这么小巧能搞定权限认证?不过用下来之后,我直接一键上头——开箱即用、几乎零配置,适配各种框架不说,还能细到 OAuth2.0、单点登录、微服务鉴权都一锅端,这不,趁热给大家唠一唠。
什么是 Sa-Token?
简单讲,Sa-Token 是一个轻量级 Java 权限认证框架,专门解决登录认证、权限认证、单点登录、OAuth2.0、微服务鉴权这类场景。版本已经更到了 1.42.0,功能是越堆越厚道,但依旧保持了它最开始的设计初心:简单优雅,不花里胡哨。
常规用法也特别直白,比如搞个登录认证,只需要一行代码:
StpUtil.login(10001);
是不是有种“写代码像在打字”的快感?想做登录校验?同样一行:
StpUtil.checkLogin();
完全不需要额外去配置各种过滤器、拦截器,连配置文件都不用写,适配 SpringBoot2、SpringBoot3、Solon、JFinal 等各种主流 Web 框架,真正意义上的开箱即用。
怎么使用
我在接入 Sa-Token 时,场景其实挺复杂的——系统里同时有前后端分离的接口,有微信公众号、小程序,还要适配 PC 端后台。按理说,这种复杂度下搞鉴权是很要命的。但用 Sa-Token,真就一个字:爽。
比如说前后端分离登录,传统框架还得自己造轮子管理 token,校验身份,搞 Cookie,再弄 Session,流程复杂又容易出锅。
而在 Sa-Token 这里,什么前端同域、不同域、同 Redis、跨 Redis,统统安排明明白白,还细分了 SSO 单点登录的三种模式,甚至连 No SDK 对接方案和非 Java 系统对接文档都给你备好了。
在做接口权限的时候,Sa-Token 支持注解鉴权,一行注解搞定:
@SaCheckPermission("user:add")
public String insert(SysUser user){
return"用户增加";
}
有没有一种“老板催上线,手起刀落”的感觉?速度真的快到飞起。更厉害的是,后面还能做到路由级别的权限拦截,不用自己再去琢磨 RequestMapping + 拦截器的组合拳了,Sa-Token 自动帮你分好模块权限。
v1.42.0 新版有哪些亮点?
这次升级内容是真的炸裂,关键是又实用又不难上手,我挑几条我自己用得上、觉得体验超棒的更新跟大家讲讲:
1. API Key 接口调用密钥
说实话,这一条我一看到就起飞了。API Key 这个概念,在接第三方平台(尤其是 OpenAI、各种 API 服务)时太常见了。以前自己要做 API Key 管理,得手搓签发逻辑、权限控制、过期机制,一套下来少说也得两天。
现在 Sa-Token 直接给你内置了完整的 API Key 管理系统,不仅可以签发、校验、禁用、删除,每个 Key 还能单独配置 scope 权限,真正做到最小授权原则。演示 Demo 仓库都现成的,拿来就能玩儿!
而且你要是想把数据持久化,还能扩展 SaApiKeyDataLoader 接口切到数据库,灵活得一批。
2. TempToken 支持反查机制
之前用临时 Token(比如 refresh token)时,一旦发出去了,就查不到历史记录,只能存 redis 或数据库自己搞。现在好了,新版可以直接反查历史 token 列表,比如:
List<String> tokenList = SaTempUtil.getTempTokenList("10001");
是不是非常人性化?特别适合做 Refresh Token 刷新、批量失效之类的操作。
3. 支持 TOTP 动态验证码
TOTP 这种动态密码认证,像 Google Authenticator、Microsoft Authenticator 这种 App 里面用的就是它。以前要接入双因子认证,要么用短信验证码(又贵又慢),要么自己造轮子生成动态码。
现在 Sa-Token 原生支持了,一行代码就能生成时间戳动态验证码,而且可以离线使用,堪称小而美的安全升级利器。
4. 全新上下文读写机制
这波操作有点底层,但效果拔群。简单说,以前 Sa-Token 依赖 Web 框架的上下文,要做异步操作或者 RPC 调用就有点麻烦。现在新版用 ThreadLocal 自己搞了套上下文系统,不仅适配更多框架方便了,连异步调用都能无缝搞定。比如在防火墙 hook 中调用 Sa-Token API,再也不担心上下文拿不到的问题。
这个改动虽然看着“无感”,但实战体验直接飙升,尤其是做网关鉴权、微服务转发场景下,稳得一批。
5. 新增统一跨域处理方案
之前做 CORS(跨域资源共享)总得自己写过滤器,现在官方直接提供了标准处理方法,还能灵活配置 header、允许的方法、预检请求啥的,一步到位,再也不用 copy paste 那一堆重复的跨域代码了。
6. sa-token-quick-login 支持 Http Basic 登录
对于做接口测试的人来说,这功能就是福音。以后 Postman、Apifox 之类的测试工具可以直接用 Http Basic 认证登录,不用每次先手动走一遍表单登录,节省一大堆测试时间。
访问地址直接写成:
http://账号:密码@localhost:8081/
是不是超级方便?
Sa-Token 给我带来了什么?
先不谈技术细节,单就开发体验而言,Sa-Token 给我最直接的感受就是:轻松。
功能覆盖超全,从基本登录到微服务下的分布式鉴权,统统能搞定; 接入速度快,10分钟能接通基本认证体系; 上手门槛低,不需要去啃厚厚的官方文档; 灵活扩展,想怎么定制就怎么定制,跟 SpringBoot 配合得天衣无缝; 社区活跃,文档丰富,出问题基本能很快找到解法。
更重要的是,在大厂惯用的微服务架构里,Sa-Token 支持 RPC 调用状态传递(dubbo、grpc),分布式 SSO,微服务网关认证,连参数签名、防止 CSRF 攻击这种细节也照顾到了,真的是一次性把开发者的操心活干到了极致。
最后
如果你问我,Sa-Token 推荐使用吗?我可以负责任地说一句——用!一定要用!
尤其是中小项目,或者想要快速搭建鉴权系统的团队,Sa-Token 完全可以帮你省下大量开发成本。而且 Sa-Token 本身是开源免费的,社区也很活跃,更新勤快又有耐心解答问题,不怕被“割韭菜”跑路。
当然啦,如果你的项目已经重度依赖 SpringSecurity、Shiro 之类的大型安全框架,也可以先试着在子模块或新项目中落地一波 Sa-Token,保证你能感受到它带来的轻盈与高效。
开源地址:https://gitee.com/dromara/sa-token
最后,我为大家打造了一份《AI副业资料》合集,发送关键字 gpt,完全免费。
同时,也可以看我写的这篇文章《DeepSeek满血复活,直接起飞!》来进行本地搭建。
-END-
以上,就是今天的分享了,看完文章记得右下角点赞,也欢迎在评论区写下你的留言。