当前位置:实例文章 » JAVA Web实例» [文章]SpringBoot 使用 Sa-Token 实现账号封禁、分类封禁、阶梯封禁

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 来实现账号封禁、分类封禁和阶梯封禁。

其他信息

其他资源

Top