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        # 在多人登录同一账号时, 是否共用一个token
  token-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为验证成功后的用户ID
        
        return SaResult.ok("登录成功");
    }
}

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

4. 权限认证

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

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

实现StpInterface接口
@Component
public class StpInterfaceImpl implements StpInterface {

    @Override
    public 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;
    }

    @Override
    public 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。

  • 22
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
集成 sa-token 可以让 Spring Boot 应用快速实现权限认证、RBAC、SSO、踢人下线等功能。下面是集成的步骤: 1. 引入 sa-token 的依赖 在 pom.xml 文件中添加以下依赖: ```xml <dependency> <groupId>cn.dev33.satoken</groupId> <artifactId>sa-token-spring-boot-starter</artifactId> <version>1.22.1-RELEASE</version> </dependency> ``` 2. 配置 sa-token 在 application.properties 或 application.yml 文件中添加以下配置: ```yaml # sa-token 配置 sa-token: # token 持久化类型:0-内存版、1-redis版、2-mongodb版、3-jwt版 store-type: 1 # redis 配置 redis: mode: standalone host: 127.0.0.1 port: 6379 database: 0 timeout: 0 # 其他配置... ``` 其中,store-type 表示 sa-token 的持久化类型,可以选择内存版、redis版、mongodb版或 jwt 版。此处选择了 redis 版。 3. 开启 sa-tokenSpring Boot 应用启动类上加上 @SaTokenApplication 注解即可开启 sa-token 的功能: ```java @SpringBootApplication @SaTokenApplication public class MyApplication { public static void main(String[] args) { SpringApplication.run(MyApplication.class, args); } } ``` 4. 使用 sa-token 现在,我们可以在代码中使用 sa-token 提供的 API 来实现权限认证、RBAC、SSO、踢人下线等功能了。比如: ```java @RestController public class MyController { // 登录接口 @PostMapping("/login") public String login(String account, String password) { // 模拟登录 if ("admin".equals(account) && "123456".equals(password)) { // 登录成功,生成token String token = SaTokenManager.createToken(account); // 返回token return token; } else { // 登录失败 return "账号或密码错误"; } } // 需要登录才能访问的接口 @GetMapping("/user") public String user() { // 获取当前登录账号 String account = SaTokenManager.getAccount(); // 返回当前登录账号 return "当前登录账号:" + account; } // 需要权限才能访问的接口 @GetMapping("/admin") public String admin() { // 检查是否具有admin角色 boolean isAdmin = SaTokenManager.hasRole("admin"); if (isAdmin) { return "欢迎管理员访问"; } else { return "没有访问权限"; } } // 注销登录接口 @PostMapping("/logout") public String logout() { // 注销登录 SaTokenManager.logout(); return "注销成功"; } } ``` 以上是使用 sa-token 的基本示例,你可以根据自己的需求,使用 sa-token 提供的更多 API 实现更复杂的功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值