Spring Boot 实现黑名单
引言
在Web开发中,我们经常需要对用户进行身份验证和权限管理。其中一个常见的需求是实现黑名单功能,即将某些用户列入黑名单,禁止其进行某些操作或访问某些资源。
本文将介绍如何使用Spring Boot实现黑名单功能。我们将使用MySQL数据库来存储黑名单列表,并使用Spring Data JPA来简化数据库操作。
准备工作
在开始之前,我们需要确保以下工具已经安装和配置好:
- JDK 1.8+
 - Spring Boot 2.4.0+
 - MySQL数据库
 
创建项目
首先,我们需要创建一个Spring Boot项目。可以使用Spring Initializr来快速生成项目结构。
在pom.xml文件中添加以下依赖:
<dependencies>
    <!-- Spring Boot Web -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <!-- Spring Data JPA -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>
    <!-- MySQL Connector -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
    </dependency>
</dependencies>
然后,创建一个名为Blacklist的实体类,用于表示黑名单中的用户:
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
@Entity
public class Blacklist {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String username;
    public Long getId() {
        return id;
    }
    public void setId(Long id) {
        this.id = id;
    }
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
}
接下来,创建一个名为BlacklistRepository的接口,继承自JpaRepository,用于对黑名单进行数据库操作:
import org.springframework.data.jpa.repository.JpaRepository;
public interface BlacklistRepository extends JpaRepository<Blacklist, Long> {
    Blacklist findByUsername(String username);
}
实现添加黑名单功能
首先,我们需要创建一个用于添加黑名单用户的接口。在BlacklistController类中添加如下代码:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class BlacklistController {
    private final BlacklistRepository blacklistRepository;
    @Autowired
    public BlacklistController(BlacklistRepository blacklistRepository) {
        this.blacklistRepository = blacklistRepository;
    }
    @PostMapping("/blacklist")
    public String addToBlacklist(@RequestBody BlacklistRequest request) {
        Blacklist blacklist = blacklistRepository.findByUsername(request.getUsername());
        if (blacklist != null) {
            return "User already exists in blacklist.";
        }
        blacklist = new Blacklist();
        blacklist.setUsername(request.getUsername());
        blacklistRepository.save(blacklist);
        return "User added to blacklist successfully.";
    }
}
在上面的代码中,我们首先通过BlacklistRequest类中的username属性获取待添加至黑名单的用户名。然后,我们使用blacklistRepository.findByUsername方法来查询数据库中是否已经存在该用户。如果存在,返回错误提示;否则,创建一个Blacklist实例,并将其保存到数据库中。
实现检查黑名单功能
现在,我们需要创建一个用于检查用户是否在黑名单中的接口。在BlacklistController类中添加如下代码:
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class BlacklistController {
    // ...
    @GetMapping("/blacklist/{username}")
    public String checkBlacklist(@PathVariable String username) {
        Blacklist blacklist = blacklistRepository.findByUsername(username);
        if (blacklist != null) {
            return "User is in blacklist.";
        } else {
            return "User is not in blacklist.";
        }
    }
}
在上面的代码中,我们通过路径变量username获取待检查的用户名,并使用blacklistRepository.findByUsername方法查询数据库。如果查询结果为null,表示该用户不在黑名单中;否则,表示用户在黑名单中。
测试
我们可以使用Postman或其他工具来测试我们的接口。首先,使用POST请求向/blacklist接口添加一个用户到黑名单中:









