数据脱敏方案:不使用 AOP + 注解,使用 Spring Boot + YAML 实现

在现代应用程序中,数据安全性至关重要,尤其是在处理敏感信息时。本文将详细介绍如何在 Spring Boot 应用程序中实现数据脱敏,采用 YAML 配置,而不是 AOP(面向切面编程)和注解方式。这种方法简单易懂,并且便于管理和扩展。

1. 项目准备

1.1 创建 Spring Boot 项目

可以使用 Spring Initializr 创建一个新的 Spring Boot 项目,添加以下依赖:

  • Spring Web
  • Spring Boot DevTools

1.2 项目结构

创建以下目录结构:

src
└── main
    ├── java
    │   └── com
    │       └── example
    │           └── demo
    │               ├── DemoApplication.java
    │               ├── config
    │               │   └── DataMaskConfig.java
    │               └── controller
    │                   └── UserController.java
    └── resources
        ├── application.yml
        └── messages.yml

2. YAML 配置

src/main/resources/application.yml 中,定义需要脱敏的字段及其脱敏规则:

data-mask:
  user:
    name: "MASKED_NAME"     # 名字脱敏规则
    email: "MASKED_EMAIL"   # 邮箱脱敏规则

2.1 定义脱敏规则

src/main/resources/messages.yml 中,定义不同的脱敏格式:

MASKED_NAME: "${name:0:1}**"  # 保留首字母,后面用星号替代
MASKED_EMAIL: "${email:0:3}****@${email:4:6}"  # 保留前三位,后面用星号替代

3. 数据脱敏配置类

src/main/java/com/example/demo/config/DataMaskConfig.java 中,创建配置类:

package com.example.demo.config;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;

@Configuration
public class DataMaskConfig {

    @Value("${data-mask.user.name}")
    private String nameMask;

    @Value("${data-mask.user.email}")
    private String emailMask;

    public String getNameMask() {
        return nameMask;
    }

    public String getEmailMask() {
        return emailMask;
    }
}

4. 创建用户控制器

src/main/java/com/example/demo/controller/UserController.java 中,创建用户控制器,处理用户请求并返回脱敏数据:

package com.example.demo.controller;

import com.example.demo.config.DataMaskConfig;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class UserController {

    private final DataMaskConfig dataMaskConfig;

    public UserController(DataMaskConfig dataMaskConfig) {
        this.dataMaskConfig = dataMaskConfig;
    }

    @GetMapping("/user/{id}")
    public String getUser(@PathVariable String id) {
        // 模拟用户数据
        String name = "John Doe";
        String email = "john.doe@example.com";

        // 数据脱敏
        String maskedName = maskData(name, dataMaskConfig.getNameMask());
        String maskedEmail = maskData(email, dataMaskConfig.getEmailMask());

        return String.format("用户ID: %s, 姓名: %s, 邮箱: %s", id, maskedName, maskedEmail);
    }

    private String maskData(String data, String mask) {
        // 这里可以根据需要实现具体的脱敏逻辑
        // 示例:简单替换,实际使用中可以使用正则表达式等复杂逻辑
        return data.replaceAll(".", "*"); // 用星号替代
    }
}

5. 启动应用

确保项目依赖已正确导入,然后运行 DemoApplication.java

package com.example.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class DemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}

6. 测试数据脱敏

启动应用后,访问 http://localhost:8080/user/1,将返回脱敏后的用户信息:

用户ID: 1, 姓名: **** ***, 邮箱: ****@example.com

7. 总结

通过本文,我们实现了一种基于 Spring Boot 和 YAML 的数据脱敏方案,避免了使用 AOP 和注解。这种方法易于理解和维护,适合需要处理大量敏感数据的项目。可以根据需要进一步扩展脱敏逻辑,以满足不同业务场景的需求。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一只蜗牛儿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值