SpringBoot 使用 Sa-Token 实现账号封禁、分类封禁、阶梯封禁
发布人:shili8
发布时间:2025-01-06 21:30
阅读次数:0
**SpringBoot 使用 Sa-Token 实现账号封禁、分类封禁、阶梯封禁**
在实际的开发中,为了防止恶意用户对系统造成损害,我们经常需要对某些特定的账号进行封禁。Sa-Token 是一个轻量级的 Java 权限框架,可以帮助我们实现账号封禁等功能。在本文中,我们将使用 Sa-Token 来实现账号封禁、分类封禁和阶梯封禁。
### 一、账号封禁首先,我们需要定义一个枚举来表示不同状态:
javapublic enum Status { NORMAL, // 正常状态 LOCKED // 封禁状态}
然后,我们可以在 Sa-Token 中创建一个自定义的令牌类型:
java@Token(type = TokenType.JWT, expire =3600) public class UserToken extends BaseToken { private Long userId; public Long getUserId() { return userId; } public void setUserId(Long userId) { this.userId = userId; } }
在这里,我们定义了一个 `UserToken` 类,继承自 `BaseToken`。这个类包含一个 `userId` 的属性。
接下来,我们需要实现一个服务来负责封禁和解除封禁:
java@Servicepublic class UserService { @Autowired private UserMapper userMapper; public void lock(Long userId) { // 封禁用户 userMapper.updateStatus(userId, Status.LOCKED); } public void unlock(Long userId) { // 解除封禁 userMapper.updateStatus(userId, Status.NORMAL); } }
在这个服务中,我们定义了两个方法:`lock()` 和 `unlock()`,分别用于封禁和解除封禁。
最后,我们需要在我们的控制器中使用 Sa-Token 来实现账号封禁:
java@RestControllerpublic class UserController { @Autowired private UserService userService; @PostMapping("/lock") public String lock(@RequestParam Long userId) { userService.lock(userId); return "用户已被封禁"; } @PostMapping("/unlock") public String unlock(@RequestParam Long userId) { userService.unlock(userId); return "用户已解除封禁"; } }
在这个控制器中,我们定义了两个方法:`lock()` 和 `unlock()`,分别用于封禁和解除封禁。
### 二、分类封禁分类封禁是指根据某些条件对特定的账号进行封禁。我们可以使用 Sa-Token 的过滤器功能来实现分类封禁:
java@Filter(type = FilterType.JWT, expire =3600) public class UserFilter extends BaseFilter { private Long userId; public Long getUserId() { return userId; } public void setUserId(Long userId) { this.userId = userId; } }
在这里,我们定义了一个 `UserFilter` 类,继承自 `BaseFilter`。这个类包含一个 `userId` 的属性。
接下来,我们需要实现一个服务来负责分类封禁:
java@Servicepublic class UserService { @Autowired private UserMapper userMapper; public void lock(Long userId, String reason) { // 封禁用户 userMapper.updateStatus(userId, Status.LOCKED, reason); } public void unlock(Long userId) { // 解除封禁 userMapper.updateStatus(userId, Status.NORMAL); } }
在这个服务中,我们定义了两个方法:`lock()` 和 `unlock()`,分别用于分类封禁和解除封禁。
最后,我们需要在我们的控制器中使用 Sa-Token 来实现分类封禁:
java@RestControllerpublic class UserController { @Autowired private UserService userService; @PostMapping("/lock") public String lock(@RequestParam Long userId, @RequestParam String reason) { userService.lock(userId, reason); return "用户已被封禁"; } @PostMapping("/unlock") public String unlock(@RequestParam Long userId) { userService.unlock(userId); return "用户已解除封禁"; } }
在这个控制器中,我们定义了两个方法:`lock()` 和 `unlock()`,分别用于分类封禁和解除封禁。
### 三、阶梯封禁阶梯封禁是指根据某些条件对特定的账号进行封禁,并且封禁的时间会随着次数的增加而增长。我们可以使用 Sa-Token 的过滤器功能来实现阶梯封禁:
java@Filter(type = FilterType.JWT, expire =3600) public class UserFilter extends BaseFilter { private Long userId; public Long getUserId() { return userId; } public void setUserId(Long userId) { this.userId = userId; } }
在这里,我们定义了一个 `UserFilter` 类,继承自 `BaseFilter`。这个类包含一个 `userId` 的属性。
接下来,我们需要实现一个服务来负责阶梯封禁:
java@Servicepublic class UserService { @Autowired private UserMapper userMapper; public void lock(Long userId, int count) { // 封禁用户 userMapper.updateStatus(userId, Status.LOCKED, count); } public void unlock(Long userId) { // 解除封禁 userMapper.updateStatus(userId, Status.NORMAL); } }
在这个服务中,我们定义了两个方法:`lock()` 和 `unlock()`,分别用于阶梯封禁和解除封禁。
最后,我们需要在我们的控制器中使用 Sa-Token 来实现阶梯封禁:
java@RestControllerpublic class UserController { @Autowired private UserService userService; @PostMapping("/lock") public String lock(@RequestParam Long userId, @RequestParam int count) { userService.lock(userId, count); return "用户已被封禁"; } @PostMapping("/unlock") public String unlock(@RequestParam Long userId) { userService.unlock(userId); return "用户已解除封禁"; } }
在这个控制器中,我们定义了两个方法:`lock()` 和 `unlock()`,分别用于阶梯封禁和解除封禁。
通过以上的实现,我们可以使用 Sa-Token 来实现账号封禁、分类封禁和阶梯封禁。