一、需求分析
之前的章节中,我们学习了 踢人下线 和 强制注销 功能,用于清退违规账号。在部分场景下,我们还需要将其 账号封禁,以防止其再次登录。
Sa-Token 是一个轻量级 java 权限认证框架,主要解决登录认证、权限认证、单点登录、OAuth2、微服务网关鉴权 等一系列权限相关问题。 Gitee 开源地址:gitee.com/dromara/sa-…
Sa-Token 提供的封禁操作有三种:
- 账号封禁:封禁掉一个账号的登录能力,使其无法登录。
- 分类封禁:封禁掉一个账号的部分业务操作权限,不影响账号的整体登录等基础功能。
- 阶梯封禁:按照不同的违规程度,给与其不同的封禁力度。
本篇文章将介绍在 Sa-Token 中如何完成上述三种封禁操作。
首先在项目中引入 Sa-Token 依赖:
xml
复制代码
<!-- Sa-Token 权限认证 --> <dependency> <groupId>cn.dev33</groupId> <artifactId>sa-token-spring-boot-starter</artifactId> <version>1.34.0</version> </dependency>
注:如果你使用的是 SpringBoot 3.x
,只需要将 sa-token-spring-boot-starter
修改为 sa-token-spring-boot3-starter
即可。
二、账号封禁
对指定账号进行封禁:
java
复制代码
// 封禁指定账号 StpUtil.disable(10001, 86400);
参数含义:
- 参数1:要封禁的账号id。
- 参数2:封禁时间,单位:秒,此为 86400秒 = 1天(此值为 -1 时,代表永久封禁)。
注意点:对于正在登录的账号,将其封禁并不会使它立即掉线,如果我们需要它即刻下线,可采用先踢再封禁的策略,例如:
java
复制代码
// 先踢下线 StpUtil.kickout(10001); // 再封禁账号 StpUtil.disable(10001, 86400);
待到下次登录时,我们先校验一下这个账号是否已被封禁:
java
复制代码
// 校验指定账号是否已被封禁,如果被封禁则抛出异常 `DisableServiceException` StpUtil.checkDisable(10001); // 通过校验后,再进行登录: StpUtil.login(10001);
旧版本在
StpUtil.login()
时会自动校验账号是否被封禁,v1.31.0 之后将 校验封禁 和 登录 两个动作分离成两个方法,不再自动校验,请注意其中的逻辑更改。
此模块所有方法:
java
复制代码