Spring Boot 中的 MySQL 数据脱敏
在如今的数据驱动世界中,数据的安全性和隐私性变得愈发重要。尤其是在处理敏感数据时,如身份证号、电话号码等,数据脱敏技术成为数据保护中的一项重要措施。本文将探讨如何在 Spring Boot 中实现数据脱敏,并通过代码示例使概念更加清晰。
1. 数据脱敏概述
数据脱敏是指在不影响数据使用的情况下,将敏感数据进行隐藏、修改或替换。常见的数据脱敏技术包括:
- 掩码:用特定字符替代敏感信息,例如,将身份证号的后四位替换为星号
****
。 - 哈希:通过哈希函数将敏感数据转为不可逆的格式。
- 随机化:对敏感数据进行随机更改,例如将年龄随机化为
20-30
岁区间。
在这篇文章中,我们将实现一种简单的掩码脱敏功能。
2. 系统设计
2.1 类图设计
我们首先设计一个数据模型类,包含一些敏感信息。同时,我们还将创建一个服务类用于处理数据脱敏。
classDiagram
class User {
+Integer id
+String name
+String email
+String phoneNumber
}
class UserService {
+String maskPhoneNumber(String phoneNumber)
+User getUserById(Integer id)
}
User --> UserService : utilizes
2.2 数据库设计
为了保存用户信息,我们使用 MySQL 数据库。假设我们有一个 users
表,结构如下:
users
------
id INT PRIMARY KEY AUTO_INCREMENT
name VARCHAR(100)
email VARCHAR(100)
phone_number VARCHAR(15)
在操作数据库时,我们会将一条用户信息读取出来,并在向外输出之前进行数据脱敏。
2.3 ER 图设计
一个概念性的 ER 图如下:
erDiagram
USER {
INT id PK
VARCHAR name
VARCHAR email
VARCHAR phone_number
}
3. 实现步骤
3.1 创建 Spring Boot 项目
首先,使用 Spring Initializr 创建一个新的 Spring Boot 项目,并添加以下依赖项:
- Spring Web
- Spring Data JPA
- MySQL Driver
3.2 配置 application.properties
在 src/main/resources/application.properties
文件中,配置 MySQL 数据库连接信息:
spring.datasource.url=jdbc:mysql://localhost:3306/test_db?useSSL=false
spring.datasource.username=root
spring.datasource.password=your_password
spring.jpa.hibernate.ddl-auto=update
3.3 创建实体类
创建 User
类表示用户信息:
package com.example.demo.model;
import javax.persistence.*;
@Entity
@Table(name = "users")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
private String name;
private String email;
private String phoneNumber;
// Getters and Setters
}
3.4 创建数据访问层
使用 Spring Data JPA,我们可以创建一个简单的 Repository 接口:
package com.example.demo.repository;
import com.example.demo.model.User;
import org.springframework.data.jpa.repository.JpaRepository;
public interface UserRepository extends JpaRepository<User, Integer> {
}
3.5 创建服务类
我们将实现一个 UserService
类,用于处理数据脱敏逻辑:
package com.example.demo.service;
import com.example.demo.model.User;
import com.example.demo.repository.UserRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class UserService {
@Autowired
private UserRepository userRepository;
public String maskPhoneNumber(String phoneNumber) {
if (phoneNumber.length() < 4) {
return phoneNumber;
}
String maskedNumber = phoneNumber.substring(0, phoneNumber.length() - 4) + "****";
return maskedNumber;
}
public User getUserById(Integer id) {
return userRepository.findById(id).orElse(null);
}
}
3.6 创建控制器
最后,我们可以创建一个控制器来获取用户信息并返回脱敏后的手机号码:
package com.example.demo.controller;
import com.example.demo.model.User;
import com.example.demo.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/users")
public class UserController {
@Autowired
private UserService userService;
@GetMapping("/{id}")
public User getUser(@PathVariable Integer id) {
User user = userService.getUserById(id);
if (user != null) {
user.setPhoneNumber(userService.maskPhoneNumber(user.getPhoneNumber()));
}
return user;
}
}
4. 测试数据脱敏功能
在数据库中插入一条用户数据,然后运行你的 Spring Boot 应用。你可以通过访问 GET /users/{id}
来获取用户信息,其中的手机号码将会被脱敏。
例如,假设我们插入了一条手机号码为 12345678901
的用户信息,通过访问 /users/1
,将会收到如下 JSON 响应:
{
"id": 1,
"name": "John Doe",
"email": "john.doe@example.com",
"phoneNumber": "1234567890****"
}
5. 结尾
数据脱敏是一项关键的技术,能够在保证数据使用的同时,保护用户的隐私。在本文中,我们使用 Spring Boot 和 MySQL 实现了一个简单的数据脱敏示例,你可以将其扩展到更多的敏感信息处理场景。希望这篇文章能为你的项目提供有价值的参考和帮助。数据安全任重道远,只有不断改进和完善,才能更好地保护用户的信息安全。