引言

在现代的互联网应用中,数据安全和隐私保护变得越来越重要。尤其是在接口返回数据时,如何有效地对敏感数据进行脱敏处理,是每个开发者都需要关注的问题。本文将通过一个简单的Spring Boot项目,介绍如何实现接口数据脱敏。

一、接口数据脱敏概述

1.1 接口数据脱敏的定义

接口数据脱敏是指在接口返回数据时,对其中的敏感信息进行处理,使其无法直接被识别和利用。例如,将用户的身份证号、手机号等信息进行部分隐藏。

1.2 接口数据脱敏的重要性

  • 保护用户隐私:防止用户的敏感信息被泄露。
  • 合规要求:满足相关法律法规对数据保护的要求。
  • 减少风险:降低数据被恶意利用的风险。

1.3 接口数据脱敏的实现方式

常见的脱敏方式包括:

  • 字符替换:用特定字符替换敏感信息的一部分。
  • 字符隐藏:隐藏敏感信息的一部分字符。
  • 自定义规则:根据业务需求自定义脱敏规则。

二、开发环境

  • IDE:IntelliJ IDEA
  • JDK:1.8+
  • Spring Boot:2.5.4

三、实现接口返回数据脱敏

3.1 添加依赖

首先,在pom.xml中添加必要的依赖:

<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>
</dependencies>

3.2 创建自定义注解

创建一个自定义注解@Sensitive,用于标识需要脱敏的字段:

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target; @Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Sensitive {
SensitiveType type();
}

3.3 定义脱敏枚举类

定义一个枚举类SensitiveType,用于指定脱敏的类型:

public enum SensitiveType {
MOBILE,
ID_CARD,
EMAIL
}

3.4 创建自定义序列化类

创建一个自定义序列化类SensitiveSerializer,实现脱敏逻辑:

import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider; import java.io.IOException; public class SensitiveSerializer extends JsonSerializer<String> { private final SensitiveType type; public SensitiveSerializer(SensitiveType type) {
this.type = type;
} @Override
public void serialize(String value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
switch (type) {
case MOBILE:
gen.writeString(value.replaceAll("(\\d{3})\\d{4}(\\d{4})", "$1****$2"));
break;
case ID_CARD:
gen.writeString(value.replaceAll("(\\d{4})\\d{10}(\\w{4})", "$1******$2"));
break;
case EMAIL:
gen.writeString(value.replaceAll("(^[^@]{3})[^@]*(@.*$)", "$1****$2"));
break;
default:
gen.writeString(value);
}
}
}

四、测试

4.1 编写测试代码

创建一个简单的用户类,并在字段上使用@Sensitive注解:

import com.fasterxml.jackson.databind.annotation.JsonSerialize;

public class User {
private String name; @Sensitive(type = SensitiveType.MOBILE)
@JsonSerialize(using = SensitiveSerializer.class)
private String mobile; @Sensitive(type = SensitiveType.ID_CARD)
@JsonSerialize(using = SensitiveSerializer.class)
private String idCard; @Sensitive(type = SensitiveType.EMAIL)
@JsonSerialize(using = SensitiveSerializer.class)
private String email; // getters and setters
}

创建一个控制器,返回用户信息:

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController; @RestController
public class UserController { @GetMapping("/user")
public User getUser() {
User user = new User();
user.setName("张三");
user.setMobile("13812345678");
user.setIdCard("123456789012345678");
user.setEmail("example@example.com");
return user;
}
}

4.2 测试

启动Spring Boot应用,访问/user接口,查看返回结果:

{
"name": "张三",
"mobile": "138****5678",
"idCard": "1234******5678",
"email": "exa****@example.com"
}

五、总结

通过本文的示例,我们了解了如何在Spring Boot中实现接口数据脱敏。通过自定义注解和序列化类,可以灵活地对不同类型的敏感数据进行处理,保护用户的隐私信息。

希望本文对你有所帮助,如果你有任何问题或建议,欢迎在评论区留言。

百万大学生都在用的AI写论文工具,篇篇无重复:AI写论文

SpringBoot实战:轻松实现接口数据脱敏的更多相关文章

  1. 使用Postman轻松实现接口数据关联

    Postman Postman是一款非常流行的HTTP(s)接口测试工具,入门简单,界面美观,功能强大.作为一个测试/开发工程师,这是一款必须要会用的工具.今天以一个实际的案例,来介绍下Postman ...

  2. Springboot 日志、配置文件、接口数据如何脱敏?老鸟们都是这样玩的!

    一.前言 核心隐私数据无论对于企业还是用户来说尤其重要,因此要想办法杜绝各种隐私数据的泄漏.下面陈某带大家从以下三个方面讲解一下隐私数据如何脱敏,也是日常开发中需要注意的: 配置文件数据脱敏 接口返回 ...

  3. SpringBoot实战(四)获取接口请求中的参数(@PathVariable,@RequestParam,@RequestBody)

    上一篇SpringBoot实战(二)Restful风格API接口中写了一个控制器,获取了前端请求的参数,现在我们就参数的获取与校验做一个介绍: 一:获取参数 SpringBoot提供的获取参数注解包括 ...

  4. SpringBoot中如何灵活的实现接口数据的加解密功能?

    数据是企业的第四张名片,企业级开发中少不了数据的加密传输,所以本文介绍下SpringBoot中接口数据加密.解密的方式. 本文目录 一.加密方案介绍二.实现原理三.实战四.测试五.踩到的坑 一.加密方 ...

  5. Springboot 配置文件、隐私数据脱敏的最佳实践(原理+源码)

    大家好!我是小富- 这几天公司在排查内部数据账号泄漏,原因是发现某些实习生小可爱居然连带着账号.密码将源码私传到GitHub上,导致核心数据外漏,孩子还是没挨过社会毒打,这种事的后果可大可小. 说起这 ...

  6. SpringBoot实战(二)Restful风格API接口

    在上一篇SpringBoot实战(一)HelloWorld的基础上,编写一个Restful风格的API接口: 1.根据MVC原则,创建一个简单的目录结构,包括controller和entity,分别创 ...

  7. SpringBoot进阶教程(七十五)数据脱敏

    无论对于什么业务来说,用户数据信息的安全性无疑都是非常重要的.尤其是在数字经济大火背景下,数据的安全性就显得更加重要.数据脱敏可以分为两个部分,一个是DB层面,防止DB数据泄露,暴露用户信息:一个是接 ...

  8. python UI自动化实战记录二:请求接口数据并提取数据

    该部分记录如何获取预期结果-接口响应数据,分成两步: 1 获取数据源接口数据 2 提取后续页面对比中要用到的数据 并且为了便于后续调用,将接口相关的都封装到ProjectApi类中. 新建python ...

  9. springboot实战开发全套教程,让开发像搭积木一样简单!Github星标已上10W+!

    前言 先说一下,这份教程在github上面星标已上10W,下面我会一一给大家举例出来全部内容,原链接后面我会发出来!首先我讲一下接下来我们会讲到的知识和技术,对比讲解了多种同类技术的使用手日区别,大家 ...

  10. SpringBoot实战 之 异常处理篇

    在互联网时代,我们所开发的应用大多是直面用户的,程序中的任何一点小疏忽都可能导致用户的流失,而程序出现异常往往又是不可避免的,那该如何减少程序异常对用户体验的影响呢?其实方法很简单,对异常进行捕获,然 ...

随机推荐

  1. JDK源码阅读-------自学笔记(二十二)(java.util.ArrayList自定义晋级,ArrayList实战详解)

    简介(Introduction)   上篇文章主要介绍了ArrayList自行模仿建立的方式,那么,其实这个类不是一次性就那么完美的,现在做一个一步步变成那样完整的ArrayList的版本升级测试. ...

  2. ansible自定义模板部署apache服务

    使用Ansible来部署Apache服务是一个很好的选择,因为它可以自动化部署过程,确保所有的服务器上都有相同的配置.以下是一个简单的步骤指南,展示如何使用Ansible来部署Apache服务: 1 ...

  3. Excel功能学习

    字符串和单元格内容拼接函数CONCATENATE a@马踏星空:=CONCATENATE(D2,E2,F2)拼接指定单元格内字符串,无分隔符 a@马踏星空:=CONCATENATE(I4," ...

  4. Istio(七):ServiceEntry,sidecar,Envoy Filter

    目录 一.模块概览 二.系统环境 三.ServiceEntry 四.sidecar 4.1 Sidecar 4.2 工作负载选择器 4.3 入口和出口监听器 五.Envoy Filter 5.1 En ...

  5. 一文教你基于LangChain和ChatGLM3搭建本地知识库问答

    本文分享自华为云社区<[云驻共创]LangChain+ChatGLM3实现本地知识库,转华为云ModelArts,实现大模型AI应用开发> ,作者:叶一一. 一.前言 本期华为云的讲师是华 ...

  6. rabbit 的下载与安装

    因为RabbitMQ是用erlang语言开发的,所以我们在安装RabbitMQ前必须要安装erlang支持. erlang的下载地址:https://www.erlang.org/downloads ...

  7. .net Mvc5Webapi接口接收参数为null的一种情况分享

    同样的前后端项目,其他接口用post接收自定义对象形式的参数,是能成功接收的.在这个前提下,出现某个接口接收的参数为null或值全是默认值,可能的原因是这样: 前端定义的参数的字段比后台定义的dto对 ...

  8. mysql 5.6 inner join and 慢优化

    慢示例: SELECT o.id FROM o_schoolnotice o INNER JOIN o_schoolnotice_parent p ON o.id = p.noticeid AND p ...

  9. C#简易商城收银系统v1.1简单工厂实现(2-2)

    C#简易商城收银系统v1.1简单工厂实现(2-2) 当初: C#简易商城收银系统v1.0 现在: 用之前的工厂模式对商城收银系统v1.0进行升级 可以参考之前的 C#简易商城收银系统v1.0 随笔  ...

  10. 使用node压缩js

    先下载并安装Node 安装完成后打开cmd运行:node -v 运行:npm -v 确定node安装成功,然后安装uglifyjs,打开cmd输入下面命令: npm install uglify-js ...