您的位置:首页 > 房产 > 家装 > Spring Boot整合SA-Token的使用详解

Spring Boot整合SA-Token的使用详解

2025/1/11 17:04:29 来源:https://blog.csdn.net/hai40587/article/details/141018741  浏览:    关键词:Spring Boot整合SA-Token的使用详解

Spring Boot整合SA-Token的使用详解,涉及到SA-Token的基本介绍、整合步骤、配置、常用API以及实际使用场景等多个方面。以下将详细阐述这一过程,确保内容不少于2000字。

一、SA-Token简介

SA-Token是一个轻量级的Java权限认证框架,由国人开发,主要解决登录认证、权限认证、单点登录、OAuth2.0、分布式Session会话、微服务网关鉴权等一系列权限相关问题。SA-Token以简单、优雅的方式完成系统的权限认证部分,让开发者能够专注于业务逻辑的开发,而无需过多关注权限控制的实现细节。

二、Spring Boot整合SA-Token的步骤

1. 引入SA-Token依赖

首先,你需要在Spring Boot项目的pom.xml文件中引入SA-Token的依赖。如果你使用的是Spring Boot 3.x版本,则需要引入sa-token-spring-boot3-starter;对于Spring Boot 2.x版本,则引入sa-token-spring-boot-starter。以Spring Boot 3.x为例,依赖配置如下:

<dependency><groupId>cn.dev33</groupId><artifactId>sa-token-spring-boot3-starter</artifactId><version>最新版本号</version> <!-- 请替换为最新的版本号 -->
</dependency>

注意:在编写本文时,SA-Token的最新版本可能已经更新,请访问SA-Token的官方GitHub仓库或SA-Token的官方网站获取最新的版本号。

2. 配置SA-Token

SA-Token的配置可以在application.ymlapplication.properties文件中进行。以下是一个application.yml的配置示例:

sa-token:token-name: satoken  # token名称(同时也是cookie名称)timeout: 2592000      # token有效期(单位:秒), 默认30天, -1代表永久有效active-timeout: 7200  # token临时有效期(单位:秒), 指定时间内无操作就视为token过期is-concurrent: true   # 是否允许同一账号多地同时登录is-share: true        # 在多人登录同一账号时, 是否共用一个tokentoken-style: uuid     # token风格is-log: false         # 是否输出操作日志# 其他配置...
3. 编写登录认证逻辑

在Spring Boot项目中,你通常需要编写登录接口来处理用户的登录请求。SA-Token提供了StpUtil.login(Object id)方法来标记当前会话登录的账号ID。以下是一个简单的登录接口示例:

@RestController
@RequestMapping("/user")
public class UserController {@PostMapping("/login")public SaResult login(@RequestParam String username, @RequestParam String password) {// 假设这里通过数据库查询用户信息并验证密码// ...// 验证成功后,使用StpUtil.login(Object id)标记当前会话登录StpUtil.login(userId); // userId为验证成功后的用户IDreturn SaResult.ok("登录成功");}
}

注意:在实际项目中,你需要根据业务逻辑从数据库中查询用户信息并验证密码。上述代码中的userId是一个假设的变量,代表验证成功后的用户ID。

4. 权限认证

SA-Token提供了丰富的API来进行权限认证。首先,你需要实现StpInterface接口来定义如何获取一个账号所拥有的权限码集合和角色标识集合。然后,你可以使用StpUtil类中的方法来进行权限校验。

当然,让我们继续并清晰地完成getRoleList方法的实现,并简要介绍如何使用SA-Token进行权限校验。

实现StpInterface接口
@Component
public class StpInterfaceImpl implements StpInterface {@Overridepublic List<String> getPermissionList(Object loginId, String loginType) {// 假设这里通过loginId(用户ID)从数据库或其他数据源查询用户的权限码集合// ...// 示例:返回一个包含权限码的列表List<String> permissions = new ArrayList<>();permissions.add("user.add");permissions.add("user.update");permissions.add("user.delete");// 根据实际情况添加更多权限码return permissions;}@Overridepublic List<String> getRoleList(Object loginId, String loginType) {// 假设这里通过loginId(用户ID)从数据库或其他数据源查询用户的角色标识集合// ...// 示例:返回一个包含角色标识的列表List<String> roles = new ArrayList<>();roles.add("admin");roles.add("user");// 根据实际情况添加更多角色标识return roles;}
}
使用SA-Token进行权限校验

在Spring Boot项目中,你可以使用SA-Token提供的StpUtil类中的方法来进行权限校验。以下是一些常用的权限校验方法:

  • checkPermission(String permission): 校验当前账号是否拥有指定权限码
  • checkRole(String role): 校验当前账号是否拥有指定角色标识
  • hasPermission(String permission): 判断当前账号是否拥有指定权限码(不抛出异常)
  • hasRole(String role): 判断当前账号是否拥有指定角色标识(不抛出异常)
示例:在Controller中使用权限校验
@RestController
@RequestMapping("/user")
public class UserController {// ... 其他方法 ...@PostMapping("/add")public SaResult addUser(@RequestBody User user) {// 校验当前账号是否拥有"user.add"权限StpUtil.checkPermission("user.add");// 如果校验通过,则执行添加用户的逻辑// ...return SaResult.ok("用户添加成功");}@PutMapping("/update/{id}")public SaResult updateUser(@PathVariable Long id, @RequestBody User user) {// 校验当前账号是否拥有"user.update"权限StpUtil.checkPermission("user.update");// 如果校验通过,则执行更新用户的逻辑// ...return SaResult.ok("用户更新成功");}// ... 其他需要权限校验的方法 ...
}

在上述示例中,addUser方法通过StpUtil.checkPermission("user.add")来校验当前登录的账号是否拥有"user.add"权限。如果当前账号没有该权限,则SA-Token会抛出异常,并默认由Spring Boot的全局异常处理器(如果你配置了的话)来处理这个异常,通常返回给前端一个错误响应。

同样地,updateUser方法通过StpUtil.checkPermission("user.update")来校验当前账号是否拥有"user.update"权限。

三、其他常用功能

SA-Token还提供了许多其他功能,如:

  • 会话管理:支持踢出其他设备登录、获取当前会话信息等功能。
  • OAuth2.0:支持OAuth2.0第三方登录。
  • 分布式Session:支持基于Redis的分布式Session会话共享。
  • 注解鉴权:通过@SaCheckLogin@SaCheckPermission等注解实现方法级别的权限校验。
  • 自动续签:支持Token的自动续签功能,避免用户频繁登录。

四、总结

通过整合SA-Token到Spring Boot项目中,你可以轻松实现登录认证、权限认证、会话管理等一系列权限控制功能。SA-Token以其简单、优雅的设计理念和丰富的功能,为开发者提供了极大的便利。希望本文的详细介绍能够帮助你更好地理解和使用SA-Token。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com