前言
在互联网软件开发领域,权限认证是保障应用安全的核心环节。Spring Boot 凭借便捷高效的特性成为主流开发框架,而 Sa-Token 作为轻量级权限认证框架,能为 Spring Boot 项目提供强大的权限控制支持。本文将详细讲解 Spring Boot3 整合 Sa-Token 的具体流程与优势,助力开发者构建更安全的应用。
Sa-Token 框架概述
(一)核心特点
Sa-Token 是专为 Java 开发者设计的轻量级权限认证框架,具有以下核心特点:
- 极简 API:5 分钟即可快速接入,10 行代码完成基础权限控制,大幅缩短开发周期。
- 全场景适配:支持会话管理、权限认证、单点登录、OAuth2.0 等安全场景,适配 Web 应用、前后端分离架构、APP、小程序等多种环境。
- 轻量无依赖:核心包仅约 700KB,无需额外依赖,避免项目臃肿。
(二)相较于传统框架的优势
与 Spring Security、Shiro 等传统权限框架相比,Sa-Token 优势显著:
- 原生支持 Token 认证:实现无 Cookie 会话管理,适配移动端应用场景。
- 动态权限刷新:权限修改无需用户重新登录,实时生效,提升用户体验。
- 精准登录控制:支持踢人下线功能,可按设备维度操作,还能颁发临时令牌、提供二级认证,增强系统安全性。
Spring Boot3 项目前期准备
(一)创建项目
可通过 IDEA 等开发工具的项目向导或 Spring Initializr 在线工具创建 Spring Boot3 项目,创建时需选择合适依赖(如 Spring Web 依赖),为后续构建 Web 应用做准备。
(二)引入 Sa-Token 依赖
若使用 Maven 构建项目,针对 Spring Boot3.x 版本,在 pom.xml 文件中添加以下依赖:
<dependency> <groupId>cn.dev33</groupId> <artifactId>sa-token-spring-boot3-starter</artifactId> <version>最新版本号</version> </dependency>注意:版本号需替换为 Sa-Token 的实际最新版本。若为 Spring Boot2.x 版本,需将 artifactId 改为
sa-token-spring-boot-starter。
(三)配置文件设置
在 application.yml 文件中配置 Sa-Token,具体内容如下:
############## Sa-Token配置 (文档: https://sa-token.cc) ############## sa-token: token-name: satoken # token有效期(单位:秒),默认30天,-1代表永久有效 timeout: 2592000 # 是否允许同一账号多地同时登录(true允许,false新登录挤掉旧登录) is-concurrent: true # token风格(可选:uuid、simple-uuid、random-32、random-64、random-128、tik) token-style: uuidSpring Boot3 整合 Sa-Token 实战步骤
(一)创建启动类
新建包(如 com.pj),在包内创建主类
SaTokenDemoApplication.java:
import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import cn.dev33.satoken.SaManager; @SpringBootApplication public class SaTokenDemoApplication { public static void main(String[] args) { SpringApplication.run(SaTokenDemoApplication.class, args); System.out.println("启动成功,Sa-Token配置如下:" + SaManager.getConfig()); } }(二)编写测试 Controller
创建 TestController 类,模拟业务接口并验证 Sa-Token 功能:
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; import cn.dev33.satoken.stp.StpUtil; @RestController public class TestController { @GetMapping("/login") public String login(String username, String password) { // 实际项目需从数据库查询比对,此处为模拟 if ("admin".equals(username) && "123456".equals(password)) { StpUtil.login(1); // 模拟用户登录,参数为用户id return "登录成功,token为:" + StpUtil.getTokenValue(); } return "用户名或密码错误"; } @GetMapping("/checkLogin") public String checkLogin() { if (StpUtil.isLogin()) { return "已登录,当前用户id为:" + StpUtil.getLoginId(); } return "未登录"; } }(三)项目测试
启动项目后,通过浏览器访问测试接口:
访问 /login 接口,输入用户名 “admin” 和密码 “123456”,成功登录后会返回 token。
访问 /checkLogin 接口,已登录状态下会显示当前用户 id,未登录则提示未登录,以此验证 Sa-Token 基本功能。
Sa-Token 高级应用场景
(一)同端互斥登录
实现同一账号在同一设备类型上不能同时登录,步骤如下:
- 在配置文件中设置 is-concurrent 为 false。
- 登录时声明设备类型,示例代码:
// 指定账号id和设备类型登录 StpUtil.login(1, "pc");当该用户在 “pc” 设备再次登录时,之前的登录会话会被挤掉。
(二)权限验证与角色管理
Sa-Token 提供丰富注解用于权限控制,示例如下:
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; import cn.dev33.satoken.annotation.SaCheckLogin; import cn.dev33.satoken.annotation.SaCheckRole; import cn.dev33.satoken.annotation.SaCheckPermission; @RestController public class PermissionController { @GetMapping("/admin/operation") @SaCheckLogin // 校验是否登录 @SaCheckRole("admin") // 校验是否有admin角色 @SaCheckPermission("admin:operation") // 校验是否有admin:operation权限 public String adminOperation() { return "只有管理员角色且拥有admin:operation权限的用户才能访问此接口"; } }实际项目中,可通过数据库管理用户角色和权限信息,登录时查询并存储在 Sa-Token 会话中,用于后续权限验证。
(三)分布式系统中的应用
将 Sa-Token 与 Redis 结合,实现分布式会话管理:
- 配置文件开启 Redis 存储:
sa-token: # 配置Token持久化到Redis is-share: true is-read-body: false is-read-head: true token-prefix: "satoken:" jwt-secret-key: null id-token-timeout: 86400分布式系统各节点引入 Sa-Token 依赖并配置后,用户在一个节点登录,token 及会话信息存储在 Redis 中,其他节点可通过 Redis 获取并验证,确保权限一致性和安全性。
总结
本文详细介绍了 Spring Boot3 整合 Sa-Token 的全过程,包括框架概述、项目准备、实战步骤及高级应用。Sa-Token 以简洁易用、功能强大的特点,为互联网软件开发提供了高效的权限认证解决方案。
未来,随着业务发展和系统复杂度增加,权限管理愈发重要。开发者可深入探索 Sa-Token 的自定义会话管理、复杂权限设计等高级功能,结合微服务架构、云原生等技术趋势,将其应用于更复杂的场景,为构建安全、可靠、高效的互联网应用奠定基础。希望本文能为开发者提供帮助,共同在技术领域探索前行。