Sa-Token:轻量级Java权限认证框架,登录鉴权超简单

你在做Java后端开发的时候,是不是也经常被各种登录、权限管理搞得头大?特别是用 Shiro、SpringSecurity 那种,配置又复杂,接入又麻烦,心态一度炸裂。而最近我体验了一下 Sa-Token,真的有种“怎么早没遇到它”的感觉啊!
Sa-Token 是一个开源、免费的轻量级 Java 权限认证框架,它主打的就是一个:简单!优雅!高效!一行代码就能登录,一行代码就能鉴权,简直不要太爽。
要在 SpringBoot 项目里用它,只需要在 pom.xml
里加上这段依赖就行了:
xml
<dependency>
<groupId>cn.dev33</groupId>
<artifactId>sa-token-spring-boot-starter</artifactId>
<version>1.42.0</version>
</dependency>
不止是 SpringBoot2,SpringBoot3、Solon、JFinal 等主流 Web 框架,Sa-Token 都有现成的适配包,妥妥的开箱即用,连配置文件都懒得建,直接一行代码搞定登录。
比如登录认证,只需要:
java
StpUtil.login(10001);
是不是有点不可思议?没错,就一行,连接口实现都不用写。要校验登录状态也一样轻松:
javaStpUtil.checkLogin();
如果你想踢掉某个账号下线,只要:
java
StpUtil.kickout(10077);
甚至权限控制也超级丝滑,可以用注解的方式:
java
@SaCheckPermission("user:add")
public String insert(SysUser user) {
return "用户增加";
}
要做路由级别的权限拦截?那就注册一个拦截器就好啦,比如:
java
registry.addInterceptor(new SaInterceptor(handler -> {
SaRouter.match("/user/**", r -> StpUtil.checkPermission("user"));
SaRouter.match("/admin/**", r -> StpUtil.checkPermission("admin"));
// ...
})).addPathPatterns("/**");
我自己用下来感觉,跟传统那种一大堆 xml 配置的框架比,简直像是从原始社会进入了信息时代,体验好到起飞。
Sa-Token的功能,不只是登录那么简单
别看 Sa-Token轻量,它的功能可是全得不能再全了。大概列一下你就懂了:
- 登录认证支持单端、多端、互斥登录,七天免登录什么的都安排上了。
- 权限认证不但有角色和权限,还能搞二级认证。
- 踢人下线、临时切换身份、模拟别人账号,全都有。
- Session 会话存取值贼方便,还能接 Redis 持久化。
- 支持各种前后台分离,APP、小程序都能玩。
- Token生成策略也能自定义,还内置了六种样式。
- 账号封禁、密码加密、HTTP Basic认证、分布式会话、微服务网关鉴权、RPC调用鉴权等等全都有。
- SSO 单点登录更是分了三种模式,解决各种不同场景问题。
- OAuth2.0 授权模式也全覆盖,授权码、密码式、隐式、客户端凭证,爱怎么用怎么用。
而且这次 v1.42.0 新版本还加了不少炸裂的新功能,比如说:
新版v1.42.0都更新了啥?
首先是 API Key 支持。
如果你搞过 ChatGPT、DeepSeek 这种开放平台,肯定知道 API Key 是什么了。这次 Sa-Token 不止支持 API Key 签发、校验、禁用、删除,还能给每个 Key 单独设定不同的权限范围,真正做到了最小授权、隔离使用,安全性妥妥的。
然后是 临时Token反查功能。
以前创建了 RefreshToken 后,想查某个账号签发过哪些 Token,没办法,现在可以了!只需要在创建 Token 的时候加个参数:
java
SaTempUtil.createToken("10001", 2592000, true);
然后就可以通过账号ID查出所有历史签发记录,管理 Token 简直不要太方便。
还有一个重磅更新,就是引入了 TOTP动态验证码算法。
简单理解就是那种6位数的一次性验证码,像 Google Authenticator 那种。这种双因子认证方式现在也可以直接在 Sa-Token 里搞了,不需要再接第三方服务了,离线也能生成,体验贼棒!
还有就是上下文存储策略大升级了。
原来 Sa-Token 是靠 Web 框架的上下文,现在用 ThreadLocal 自己搞定上下文,不但兼容性更好了,异步场景下也能正常使用,调用起来更加顺滑。
新版本还自带了一个 CORS 跨域处理组件。
以前跨域得自己写过滤器,现在直接内置好好的,只需要配一下就行,开发体验又上了一个台阶。
还有个小升级也挺有意思,就是 sa-token-quick-login
插件支持了 Http Basic 认证。
之前要登录还得填表单,现在直接在地址栏里写账号密码就能认证,比如:
http://sa:123456@localhost:8081/
非常适合拿来配合 Postman、API接口测试工具做接口测试,调试速度快到飞起。
最后
说实话,第一次用 Sa-Token 的时候,我还有点怀疑,这么简单真的靠谱吗?
结果一用发现,真的就是那么简单,而且功能一点都不少,文档也超级详细,官方还有各种示例Demo,几乎你想到的问题,文档里都有现成答案。
开发效率提高是真的,心情也舒畅了不少。特别是切换到 Sa-Token 后,项目的权限认证模块变得清爽又好维护,再也不用为了一堆复杂的安全配置头大了。
而且最重要的是,它是开源免费的,社区活跃度也很高,有问题提issue很快就能得到回复,体验感爆棚。
最后嘛,如果你也在做Java开发,特别是想搞登录、鉴权这块,我真的强烈推荐试试看 Sa-Token,真的会让你爱上权限管理这一块工作啊!