news 2026/2/26 13:56:46

SpringBoot3整合Sa-Token权限认证实战

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
SpringBoot3整合Sa-Token权限认证实战

前言

在互联网软件开发领域,权限认证是保障应用安全的核心环节。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: uuid

Spring 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 的自定义会话管理、复杂权限设计等高级功能,结合微服务架构、云原生等技术趋势,将其应用于更复杂的场景,为构建安全、可靠、高效的互联网应用奠定基础。希望本文能为开发者提供帮助,共同在技术领域探索前行。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!