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接口添加一个用户到黑名单中: