news 2026/4/3 3:19:22

SpringBoot3实现SA-Token踢人下线

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
SpringBoot3实现SA-Token踢人下线

前言

在互联网软件开发领域,对于许多应用系统而言,实现用户的踢人下线功能是一项重要需求。比如在一些多人协作平台,当管理员发现某个用户存在违规行为时,需要能够及时将其踢出系统;又或者在某些对安全性要求较高的金融类应用中,当检测到用户账号存在异常登录情况时,要能立即将该账号在其他设备上的登录会话强制结束。在 Spring Boot3 项目中,我们可以借助 SA - Token 框架优雅地实现这一功能。本文将深入探讨如何通过 SA - Token 在 Spring Boot3 中达成踢人下线的操作。

SA - Token 框架简介

SA - Token(Simple & All)是一个基于 Java 的轻量级权限认证框架,在众多 Java 项目中被广泛应用,用于在 Web 和普通 Java 应用中进行身份认证和权限控制。它支持账号密码登录、Token 登录、微信登录等多种身份验证方式,极大地满足了不同业务场景下的认证需求。

在权限控制方面,由于每个项目的需求不同,权限设计也千变万化,SA - Token 将获取当前账号权限码集合的操作以接口的方式暴露给开发者,方便根据具体业务逻辑进行重写。并且,SA - Token 允许角色和权限分开独立验证,还支持根据通配符指定泛权限,例如当一个账号拥有 “art.*” 的权限时,“art.add”、“art.delete”、“art.update” 等权限都将匹配通过。

Spring Boot3 项目集成 SA-Token

(一)添加依赖

如果你的项目使用的是 Maven 构建工具,对于 Spring Boot3 项目,只需要在pom.xml文件中添加如下依赖:

<dependency> <groupId>cn.dev33</groupId> <artifactId>sa-token-spring-boot3-starter</artifactId> </dependency>

(二)配置文件设置

在application.yml文件中,可以增加如下配置对框架进行定制化使用:

sa-token: token-name: satoken # 设置Token的名称 timeout: 2592000 # 设置Token的有效期(单位:秒),默认30天,-1代表永久有效 activity-timeout: -1 # 设置Token最低活跃频率(单位:秒),如果Token超过此时间没有访问系统就会被冻结,默认-1代表不限制,永不冻结 is-share-token: false # 设置在多人登录同一账号时,是否共用一个Token ,为true时所有登录共用一个Token,为false时每次登录新建一个Token

使用 SA-Token 实现踢人下线功能

(一)核心代码解析

根据账号 ID 踢人下线

在 SA-Token 中,使用StpUtil.kickout(10001);这样的代码就可以将指定账号(这里的10001为账号的loginId)踢下线。该操作会将与该账号相关的所有有效 Token 标记为已失效状态,当该账号的用户再次使用这些 Token 进行请求时,系统会检测到 Token 已被踢下线,并返回相应的错误提示。

根据账号 ID 和终端类型踢人下线

有时候我们可能希望只将某个账号在特定终端上的登录踢下线,比如只踢掉某个账号在 PC 端的登录,而保留其在移动端的登录。这时可以使用StpUtil.kickout(10001, "PC");代码,这里的 “PC” 就是指定的终端类型标识。通过这种方式,可以更精准地控制用户在不同终端上的登录状态。

根据 Token 值踢人下线


StpUtil.kickoutByTokenValue("token");代码能够通过指定的 Token 值将对应的用户踢下线。这种方式在某些特定场景下非常有用,例如当系统检测到某个 Token 存在异常使用行为时,可以直接通过该 Token 值将对应的用户会话结束。

(二)强制注销和踢人下线的区别

在理解踢人下线功能时,需要明确强制注销和踢人下线是有区别的。强制注销操作,例如StpUtil.logout(10001);(强制指定账号注销下线),等价于对方主动调用了注销方法,当该用户再次使用原 Token 访问系统时,会提示 Token 无效。而踢人下线操作不会清除 Token 信息,只是将其打上特定标记,再次访问时会提示 Token 已被踢下线。这一区别在实际应用中需要根据业务需求进行合理选择和运用。

(三)示例代码实现

创建用户登录接口

假设我们有一个用户登录的 Controller,代码如下:

import cn.dev33.satoken.stp.StpUtil; import org.springframework.web.bind.annotation.*; @RestController @RequestMapping("user") public class UserController { @PostMapping("doLogin") public String doLogin(@RequestParam String username, @RequestParam String password) { if("admin".equals(username) && "123456".equals(password)) { // 假设这里通过数据库查询得到用户ID为10001 StpUtil.setLoginId(10001); return "登录成功"; } return "用户名或密码错误"; } }

在这个登录接口中,当用户名和密码验证通过后,使用StpUtil.setLoginId(10001);将用户 ID 设置到会话中,表示用户登录成功。

创建踢人下线接口

接下来创建一个用于踢人下线的接口:

@GetMapping("kickUser") public String kickUser(@RequestParam Long userId) { StpUtil.kickout(userId); return "已将用户ID为" + userId + "的用户踢下线"; }

这个接口接收一个用户 ID 参数,调用StpUtil.kickout(userId);方法将指定用户踢下线,并返回相应的提示信息。

实际应用场景及注意事项

(一)实际应用场景

安全管理:当系统检测到某个用户账号存在被盗用风险,例如短时间内出现大量异常请求或者在多个陌生 IP 地址登录时,管理员可以通过系统的管理后台操作,调用踢人下线接口,将该账号在所有设备上的登录会话强制结束,保障用户账号安全。

违规处理:在社交平台、论坛等应用中,如果某个用户违反了平台规则,发布了违法、违规内容,管理员可以将其账号踢下线,阻止其继续在平台上进行操作,同时可以配合账号封禁等措施,对违规用户进行处理。

多设备登录管理:有些应用可能限制一个账号同时只能在一个设备上登录,当用户在新设备上登录时,系统自动将该账号在其他已登录设备上的会话踢下线,确保账号登录状态的唯一性。

(二)注意事项

性能问题:在高并发场景下,如果频繁进行踢人下线操作,可能会对系统性能产生一定影响。因为每次踢人下线操作可能涉及到数据库或缓存中相关 Token 状态的更新等操作。可以考虑采用缓存机制来优化性能,例如将 Token 的状态缓存起来,减少对数据库的直接读写操作。

用户体验:在进行踢人下线操作时,要尽量给用户提供友好的提示信息。例如,当用户被踢下线后,在前端页面弹出提示框告知用户 “您的账号已在其他设备上被强制下线,如果不是您本人操作,请及时修改密码” 等信息,引导用户进行后续处理,提升用户体验。

权限控制:对于踢人下线功能的操作权限,需要进行严格的控制。只有具有相应权限的管理员或特定角色的用户才能够执行踢人下线操作,防止恶意操作。可以借助 SA-Token 自身的权限控制功能,通过注解(如@SaCheckPermission)来限制接口的访问权限。

通过以上步骤和方法,我们在 Spring Boot3 项目中借助 SA-Token 框架成功实现了踢人下线功能。希望本文能对各位互联网软件开发人员在实际项目开发中有所帮助,让大家能够更加高效地实现系统的相关功能需求。在实际应用中,大家可以根据具体业务场景对代码进行进一步的优化和扩展。

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

华为访问控制列表的配置

任务一&#xff1a;基本访问控制列表的配置一、基础配置RA&#xff1a;<Huawei>sys Enter system view, return user view with CtrlZ. [Huawei]undo info-center ena Info: Information center is disabled. [Huawei]sysn RA [RA]int g0/0/0 [RA-GigabitEthernet0/0/0]i…

作者头像 李华
网站建设 2026/4/2 13:28:46

基于蚁群算法的配电网重构MATLAB程序探索

基于蚁群算法的配电网重构 MATLAB程序在电力系统领域&#xff0c;配电网重构是一项关键的任务&#xff0c;它旨在通过改变配电网中开关的状态&#xff0c;优化网络结构&#xff0c;以降低网损、提高电压质量等。蚁群算法作为一种智能优化算法&#xff0c;在解决这类组合优化问题…

作者头像 李华
网站建设 2026/3/19 22:28:56

一篇文章告诉你Java并发编程为什么这么难学?

不知道大家今年的金九银十是否有出去面试过&#xff1f;有出去面试的朋友肯定深有感受&#xff0c;像我们刚入行那会面试的加分项现在卷得已经成为了面试的基础题&#xff08;手动狗头&#xff09;。其中最典型的就属这个Java并发编程了。之前一般只有大厂才会有高并发编程相关…

作者头像 李华
网站建设 2026/4/2 4:11:14

降雨—非饱和渗流下土石混合体中土壤细颗粒的迁移与运动探索

降雨—非饱和渗流下土石混合体中土壤细颗粒的迁移与运动 [1]模型简介&#xff1a;使用数值模拟软件COMSOL&#xff0c;分析强降雨条件下土石混合体非饱和渗流土壤细颗粒的迁移与运动 [2]案例内容&#xff1a;完整数值模型一个&#xff08;包括模型边界条件设置、云图结果、后处…

作者头像 李华
网站建设 2026/4/2 16:53:51

GTKWave崩溃终极解决方案:快速修复VCD文件解析错误

GTKWave崩溃终极解决方案&#xff1a;快速修复VCD文件解析错误 【免费下载链接】gtkwave GTKWave is a fully featured GTK based wave viewer for Unix and Win32 which reads LXT, LXT2, VZT, FST, and GHW files as well as standard Verilog VCD/EVCD files and allows the…

作者头像 李华