Sa-Token:一行代码搞定登录,Java鉴权框架还能这么简单

张开发
2026/6/4 23:04:11 15 分钟阅读

分享文章

Sa-Token:一行代码搞定登录,Java鉴权框架还能这么简单
Sa-Token一行代码搞定登录Java鉴权框架还能这么简单引言Java权限认证的市场痛点在 Java 后端开发中权限认证是几乎每个项目都绕不开的模块。根据2025 年中国开发者生态报告92%的企业级 Java 项目需要实现用户认证和权限管理。传统方案如 Shiro、Spring Security 功能强大但配置繁琐、学习曲线陡峭。一个基本的登录认证Spring Security 需要配置多个 Bean 和过滤器而Sa-Token 只需一行代码。1. 项目背景及简介Sa-Token是一个轻量级、一站式的 Java权限认证框架目标是让鉴权变得简单、优雅。采用纯血自研架构核心包零依赖不基于任何现有框架封装。目前已覆盖登录认证、权限认证、SSO 单点登录、OAuth2.0、微服务网关鉴权五大核心模块。Gitee48,838 StarGitHub18,523 Star。2. 目标客户Java 后端开发者需要快速实现权限认证企业技术团队统一认证方案降低开发成本微服务架构团队需要网关层统一鉴权多端应用团队APP 小程序 Web 多端登录认证3. 平台定位Sa-Token 的定位是Java权限认证的最简方案——不替代 Spring Security而是为追求简洁的团队提供一个更轻量的选择。核心理念简单是终极的复杂。4. 平台技术语言JavaJDK 8框架集成SpringBoot 2/3/4、Solon、JFinal协议Apache-2.0永久免费持久层支持 Redis 扩展重启数据不丢失官网https://sa-token.cc5. 平台核心功能登录认证单端/多端登录、同端互斥、七天免登录权限认证权限/角色认证、注解式鉴权、路由拦截鉴权单点登录 SSO三种模式覆盖同域、跨域、跨 Redis 场景OAuth2.0授权码式、隐藏式、密码式、客户端凭证式微服务鉴权适配 Gateway、ShenYu、Zuul 等网关实用插件JWT 集成、API 参数签名、Token 自动续签、账号封禁6. 平台独特优势✅一行代码登录StpUtil.login(10001)即可完成会话登录✅注解鉴权SaCheckPermission(user:add)优雅分离鉴权与业务✅多端互斥像 QQ 一样手机电脑同时在线但两个手机互斥✅路由拦截SaRouter.match(/user/**, ...)适配 RESTful✅文档完善中文文档 中文注释 中文社区✅社区活跃Gitee 近 5 万 Star 竞品对比维度Sa-TokenSpring SecurityApache Shiro学习曲线⭐⭐⭐⭐⭐极低⭐⭐陡峭⭐⭐⭐中等配置复杂度⭐⭐⭐⭐⭐零配置⭐⭐复杂⭐⭐⭐中等API 简洁度⭐⭐⭐⭐⭐一行登录⭐⭐繁琐⭐⭐⭐一般SSO✅ 内置三种模式❌ 需 Spring SSO⭐⭐ 有限OAuth2.0✅ 内置⭐⭐ 需扩展❌ 需自实现微服务鉴权✅ 内置❌ 需 Spring Cloud❌ 需自实现多端互斥✅ 像 QQ 一样❌ 需自实现❌ 需自实现社区活跃度⭐⭐⭐⭐中文活跃⭐⭐⭐⭐⭐国际⭐⭐⭐放缓Gitee Star4.8万N/AN/ASa-Token 的核心优势在于API 极简 功能全面 中文生态。Spring Security 功能最强大但学习曲线陡峭Shiro 简洁但维护放缓。如果你追求快速开发 简洁 APISa-Token 是最优选择如果需要企业级安全审计和复杂安全策略Spring Security 仍是首选。7. 平台安装使用Maven 引入dependency groupIdcn.dev33/groupId artifactIdsa-token-spring-boot-starter/artifactId version1.45.0/version /dependency快速上手import cn.dev33.satoken.stp.StpUtil; import org.springframework.web.bind.annotation.*; RestController publicclass AuthController { // 登录 - 只需一行代码 PostMapping(/login) public String login(String name, String pwd) { StpUtil.login(10001); return登录成功; } // 需要登录后访问 GetMapping(/user/info) public String info() { StpUtil.checkLogin(); // 未登录自动抛出异常 return用户信息; } // 权限校验 - 注解式鉴权 SaCheckPermission(user:add) PostMapping(/user/add) public String addUser() { return用户添加成功; } }路由拦截鉴权Configuration public class SaTokenConfig implements WebMvcConfigurer { Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(new SaInterceptor(handle - { SaRouter.match(/user/**, r - StpUtil.checkPermission(user)); SaRouter.match(/admin/**, r - StpUtil.checkPermission(admin)); })).addPathPatterns(/**); } } 实测体验Sa-Token 的 API 设计是我用过最优雅的权限框架——StpUtil.login(10001)一行代码搞定登录StpUtil.isLogin()一行代码检查状态比 Spring Security 的十几行配置简洁太多了。多端互斥功能也很实用像 QQ 一样手机和电脑可以同时在线但两个手机会互斥这种细节设计体现了对真实业务场景的深入理解。唯一需要注意的是 Sa-Token 的生态主要在国内国际社区知名度不如 Spring Security如果项目需要国际团队协作可能需要多做技术分享。8. 应用场景及案例说明企业后台系统快速搭建 RBAC 权限体系替代 Shiro/Spring Security多端应用APP 小程序 Web 多端登录认证微服务架构网关层统一鉴权RPC 调用状态传递不丢失SSO 单点登录一套代码支持同域/跨域/跨 Redis 多模式 SSO开放平台OAuth2.0 快速搭建授权服务支持 API 参数签名防篡改 技术原理一行代码登录是怎么做到的Sa-Token 的StpUtil.login(10001)一行代码完成登录背后是纯血自研的会话管理架构不基于 Spring Security 或 Shiro 的任何封装。1. 自研 Token 机制Sa-Token 不依赖 JWT 或 Session而是自研了一套轻量级 Token 方案// StpUtil.login() 的底层流程 public static void login(Object id) { // 1. 生成 Token默认 UUID可配置为 JWT String tokenValue SaTokenStrategy.instance.createToken(id); // 2. 将 Token 与用户 ID 的映射写入 Redis默认 2 小时过期 SaTokenDao.dataMap.put(tokenValue, id); // 3. 将 Token 写入当前请求的 Cookie / Header SaHolder.getRequest().setCookie(tokenValue); // 4. 写入 ThreadLocal方便后续 StpUtil.getLoginId() 直接获取 SaTokenHolder.setTokenValue(tokenValue); }2. 多端互斥的实现原理Sa-Token 的多端互斥像 QQ 一样手机和电脑同时在线但两个手机互斥通过设备类型 Token 分组实现// 登录时指定设备类型 StpUtil.login(10001, PC); // PC 端 StpUtil.login(10001, Mobile); // 手机端 // 框架内部维护 // token:login:10001:PC → token_value_1 // token:login:10001:Mobile → token_value_2 // 同端登录时自动踢出旧 Token互斥 // 异端登录时互不影响共存3. 为什么不用 Spring SecuritySpring Security 的核心设计是过滤器链 Bean 配置一个基本登录需要配置AuthenticationManager、UserDetailsService、PasswordEncoder、SecurityFilterChain等多个 Bean。Sa-Token 选择纯血自研不基于任何现有框架是因为它的目标用户是追求简洁的团队——一行代码登录、注解鉴权、路由拦截全部通过静态方法 AOP 实现零配置起步。这种设计牺牲了 Spring Security 的企业级安全审计能力但换取了开发效率的数倍提升。总结Sa-Token 用极简的 API 设计解决了 Java权限认证中的复杂问题。从一行代码登录到完整的微服务鉴权体系它提供了一站式解决方案。对比 Spring Security 和 ShiroSa-Token 的核心优势在于API 最简洁 学习成本最低 中文生态最活跃。如果你正在为 Spring Security 的配置繁琐头疼不妨试试 Sa-Token——它可能会让你重新爱上权限开发。互动话题你在项目中用过这个工具/框架吗体验如何评论区聊聊你的看法。项目地址https://gitee.com/dromara/Sa-Token

更多文章