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