当前位置: 首页 > news >正文

springboot使用aop或Jackson进行数据脱敏

1.aop

启动类加@EnableAspectJAutoProxy

自定义注解,在实体类中使用表示被脱敏字段

建立aop切面类

可能这里gpt会建议你用@Pointcut("execution(public * com.xx.aop..*.get*(..))")这种方式拦截,这种我试了,拦截不住。猜测在mvc返回的时候,已经不被aop拦住了,除非手动调用。并且get方式还要user成为bean,不值当。直接拦截controller包吧。

2.Jackson

序列化类

import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.BeanProperty;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;
import com.fasterxml.jackson.databind.ser.ContextualSerializer;import java.io.IOException;public class DesensitizeSerializer extends JsonSerializer<String> implements ContextualSerializer {private SensitiveType type;private int startInclude;private int endExclude;public DesensitizeSerializer() {this.type = SensitiveType.COMMON;}public DesensitizeSerializer(SensitiveType type) {this.type = type;}@Overridepublic void serialize(String value, JsonGenerator gen, SerializerProvider serializers) throws IOException, IOException {switch (type) {case COMMON:gen.writeString(MsgDesensitizedUtil.commonStr(value));break;case ID_CARD:gen.writeString(MsgDesensitizedUtil.idCardNum(value));break;case PHONE_NUMBER:gen.writeString(MsgDesensitizedUtil.mobilePhone(value));break;case EMAIL:gen.writeString(MsgDesensitizedUtil.email(value));break;default:throw new RuntimeException("未知脱敏类型");}}@Overridepublic JsonSerializer<?> createContextual(SerializerProvider prov, BeanProperty property) {if (property != null) {SensitiveData annotation = property.getAnnotation(SensitiveData.class);if (annotation != null) {this.type = annotation.value();}}return this;}}

针对多种类型的脱敏枚举类

在实体中添加就行了,不需要把自定义序列化加载到SimpleModule里

相关文章:

springboot使用aop或Jackson进行数据脱敏

1.aop 启动类加EnableAspectJAutoProxy 自定义注解&#xff0c;在实体类中使用表示被脱敏字段 建立aop切面类 可能这里gpt会建议你用Pointcut("execution(public * com.xx.aop..*.get*(..))")这种方式拦截&#xff0c;这种我试了&#xff0c;拦截不住。猜测在mvc返…...

【Solidity】基础介绍

数据类型 值类型 值类型的变量在赋值或作为函数参数传递时会被复制。 布尔类型&#xff1a;bool整数类型&#xff1a; 无符号&#xff1a;uint8、uint16、…、uint256 (uint256 可简写为 uint)有符号&#xff1a;int8、int16、…、int256 (int256可简写为 int) 地址类型&…...

【SpringBoot3】双向实时通讯 websocket

文章目录 一、Websocket使用步骤二、示例1&#xff1a;继承抽象类 AbstractWebSocketHandler后端代码前端代码 三、示例2&#xff1a;使用注解ServerEndpoint后端代码前端代码 四、前端代码封装 一、Websocket使用步骤 在Spring Boot中使用WebSocket是一个常见的需求&#xff…...

搭建内网开发环境(一)|基于docker快速部署开发环境

引言 最近因需要搭建一套简易版的纯内网的开发环境&#xff0c;服务器采用 centos8.0&#xff0c;容器化技术采用 docker 使用 docker-compose 进行容器编排。 该系列教程分为两大类&#xff1a; 软件安装和使用&#xff0c;这类是开发环境常用的软件部署和使用&#xff0c;涉…...

MATLAB R2023b配置Fortran编译器

MATLAB R2023b配置Fortran编译器 引言1. 安装Visual Studio 20192. 安装Intel API20243. 配置xml文件文件4. 设置环境变量5. MATLAB编译Fortran 引言 当我们需要用到MATLAB编译Fortran代码后进行调用计算时&#xff0c;整个配置流程较繁琐。下面以MATLAB R2023b为例&#xff0…...

2024新型数字政府综合解决方案(七)

新型数字政府综合解决方案通过集成人工智能、大数据、区块链和云计算技术&#xff0c;创建了一个高度智能化和互联互通的政府服务平台&#xff0c;旨在全面提升行政效率、服务质量和透明度。该平台实现了跨部门的数据整合与实时共享&#xff0c;利用人工智能进行智能决策支持和…...

搭建高可用k8s集群

高可用 Kubernetes V1.28.10 安装 文章目录 1. 环境介绍2. 准备工作2.1 修改主机名称2.2 修改hosts文件2.3 关闭防火墙和SLinux2.4 配置SSH免密访问2.4.1 主机名称: k8s-master-01 操作 2.5 配置yum源2.6 禁用Swarp分区2.7 同步时间2.8 配置内核转发及网桥过滤2.9 安装 IPVS 3…...

完美解决html2canvas + jsPDF导出pdf分页内容截断问题

代码地址&#xff1a;https://github.com/HFQ12333/export-pdf.git html2canvas jspdf方案是前端实现页面打印的一种常用方案&#xff0c;但是在实践过程中&#xff0c;遇到的最大问题就是分页截断的问题&#xff1a;当页面元素超过一页A4纸的时候&#xff0c;连续的页面就会…...

14 地址映射

14 地址映射 1、地址划分2、相关函数2.1 ioremap/iounmap2.2 mmap地址映射 3、总结 1、地址划分 明确&#xff1a;在linux系统中,不管是应用程序还是驱动程序&#xff0c;都不允许直接访问外设的物理地址,要想访问必须将物理地址映射到用户虚拟地址或者内核虚拟地址&#xff0…...

Java Resilience4j-RateLimiter学习

一. 介绍 Resilience4j-RateLimiter 是 Resilience4j 中的一个限流模块&#xff0c;我们对 Resilience4j 的 CircuitBreaker、Retry 已经有了一定的了解&#xff0c;现在来学习 RateLimiter 限流器&#xff1b; 引入依赖&#xff1b; <dependency><groupId>io.g…...

Nginx--地址重写Rewrite

一、什么是Rewrite Rewrite对称URL Rewrite&#xff0c;即URL重写&#xff0c;就是把传入Web的请求重定向到其他URL的过程 URL Rewrite最常见的应用是URL伪静态化&#xff0c;是将动态页面显示为静态页面方式的一种技术。比如http://www.123.com/news/index.php?id123 使用U…...

webflux源码解析(1)-主流程

目录 1.关键实例的创建1.1 实例创建1.2 初始化 2.处理请求的关键流程2.1 从ReactorHttpHandlerAdapter开始2.1 DispatcherHandler的初始化2.2查找mapping handler2.3 处理请求(执行handler)2.4 返回结果处理 3.webflux的配置装配参考&#xff1a; WebFlux是Spring 5.0框架推出的…...

ipad作为扩展屏的最简单方式

将iPad用作扩展屏幕有几种简单而有效的方法。以下是几种常见的方式&#xff1a; 1. Sidecar&#xff08;苹果官方功能&#xff09; 适用设备&#xff1a;iPad和Mac&#xff08;macOS Catalina及以上版本&#xff09;。功能&#xff1a;Sidecar 是苹果官方的功能&#xff0c;可…...

【卡码网Python基础课 17.判断集合成员】

目录 题目描述与分析一、集合二、集合的常用方法三、代码编写 题目描述与分析 题目描述&#xff1a; 请你编写一个程序&#xff0c;判断给定的整数 n 是否存在于给定的集合中。 输入描述&#xff1a; 有多组测试数据&#xff0c;第一行有一个整数 k&#xff0c;代表有 k 组测…...

生物研究新范式!AI语言模型在生物研究中的应用

–https://doi.org/10.1038/s41592-024-02354-y 留意更多内容&#xff0c;欢迎关注微信公众号&#xff1a;组学之心 Language models for biological research: a primer 研究团队及研究单位 James Zou–Department of Biomedical Data Science, Stanford University, Stan…...

python语言day08 属性装饰器和property函数 异常关键字 约束

属性装饰器&#xff1a; 三个装饰器实现对私有化属性_creat_time的get&#xff0c;set&#xff0c;del方法&#xff1b; 三个装饰器下的方法名都一样&#xff0c;通过message.creat_time的不同操作实现调用get&#xff0c;set&#xff0c;del方法。 __inti__&#xff1a; 创建并…...

day01JS-数据类型-01

1. 浏览器内核 通常所谓的浏览器内核也就是浏览器所采用的渲染引擎&#xff0c;渲染引擎决定了浏览器如何显示网页的内容以及页面的格式信息。不同的浏览器内核对网页编写语法的解释也有不同&#xff0c;因此同一网页在不同的内核的浏览器里的渲染&#xff08;显示&#xff09;…...

MATLAB 手动实现一种高度覆盖值提取建筑物点云的方法(74)

专栏往期文章,包含本章 MATLAB 手动实现一种高度覆盖值提取建筑物点云的方法(74) 一、算法介绍二、算法实现1.代码2.效果总结一、算法介绍 手动实现一种基于高度覆盖值的建筑物点云提取方法,适用于高大的城市建筑物,比只利用高度提取建筑物的方法更加稳定和具有价值,主要…...

git的下载与安装(Windows)

Git是一个开源的分布式版本控制系统&#xff08;Distributed Version Control System&#xff0c;简称DVCS&#xff09;&#xff0c;它以其高效、灵活和强大的功能&#xff0c;在现代软件开发中扮演着至关重要的角色。 git官网&#xff1a;Git (git-scm.com) 1.进入git官网 2…...

腾讯云AI代码助手 —— 编程新体验,智能编码新纪元

阅读导航 引言一、开发环境介绍1. 支持的编程语言2. 支持的集成开发环境&#xff08;IDE&#xff09; 二、腾讯云AI代码助手使用实例1. 开发环境配置2. 代码补全功能使用&#x1f4bb;自动生成单句代码&#x1f4bb;自动生成整个代码块 3. 技术对话3. 规范/修复错误代码4. 智能…...

Windows风扇噪音终结者:FanControl实战解密与深度配置

Windows风扇噪音终结者&#xff1a;FanControl实战解密与深度配置 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitHub_Trending/fa…...

Python自动化爬取企查查企业工商信息的实战技巧

1. Python爬取企查查数据的核心思路 企查查作为国内权威的企业信息查询平台&#xff0c;包含了大量有价值的工商注册信息。对于金融、证券行业的从业者来说&#xff0c;经常需要批量获取这些数据进行分析。手动一个个查询不仅效率低下&#xff0c;还容易出错。这时候Python自动…...

别再手动调了!Meshlab模型对齐的两种高效工作流与常见误区盘点

Meshlab模型对齐的高效策略与深度避坑指南 Meshlab作为开源三维模型处理工具&#xff0c;在学术研究和工业应用中扮演着重要角色。模型对齐作为其核心功能之一&#xff0c;直接影响后续的编辑、分析和可视化效果。许多用户虽然掌握了基础操作&#xff0c;但在面对复杂场景时仍会…...

Qwen3-TTS-12Hz-1.7B-Base真实案例:为视障开发者生成无障碍编程教程语音

Qwen3-TTS-12Hz-1.7B-Base真实案例&#xff1a;为视障开发者生成无障碍编程教程语音 1. 这不是“读出来就行”的语音&#xff0c;而是真正听得懂代码的语音助手 你有没有想过&#xff0c;一段Python函数说明、一个React组件生命周期图解、甚至一段带缩进和符号的JSON结构&…...

全志T3核心板DDR初始化失败:从ZQ校准误导到VREF电压偏差的排查实录

1. 问题现象与初步排查 那天早上刚到实验室&#xff0c;测试组的同事就急匆匆跑过来&#xff1a;"哥&#xff0c;又有三台设备启动不了&#xff0c;uboot都没跑起来&#xff01;"我接过设备一看&#xff0c;果然又是熟悉的ZQ校准错误提示&#xff0c;这已经是本周第五…...

G-Helper实战:华硕笔记本硬件控制与性能调优解决方案

G-Helper实战&#xff1a;华硕笔记本硬件控制与性能调优解决方案 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops. Control tool for ROG Zephyrus G14, G15, G16, M16, Flow X13, Flow X16, TUF, Strix, Scar and other models 项目地址…...

动漫IP商业化新路径:AnythingtoRealCharacters2511助力二次元角色真人化营销落地

动漫IP商业化新路径&#xff1a;AnythingtoRealCharacters2511助力二次元角色真人化营销落地 1. 动漫角色真人化的商业价值 动漫IP的商业化一直是内容产业的重要课题。传统的周边商品、联名合作虽然有效&#xff0c;但缺乏突破性创新。随着AI技术的发展&#xff0c;动漫角色真…...

比迪丽模型在数据库课程设计中的应用:ER图可视化增强

比迪丽模型在数据库课程设计中的应用&#xff1a;ER图可视化增强 1. 引言 数据库课程设计是计算机专业学生的必修实践环节&#xff0c;其中ER图&#xff08;实体-关系图&#xff09;的设计与呈现是核心难点。传统工具绘制的ER图往往显得枯燥抽象&#xff0c;学生难以直观理解…...

AI显微镜-Swin2SR保姆级教程:一键修复模糊图片详细步骤

AI显微镜-Swin2SR保姆级教程&#xff1a;一键修复模糊图片详细步骤 1. 项目简介 你是否遇到过这样的困扰&#xff1a;手机里存着多年前的老照片&#xff0c;画质模糊看不清细节&#xff1b;或者从网上下载的图片分辨率太低&#xff0c;放大后全是马赛克&#xff1f;传统的图片…...

避坑指南:LangChain中create_retrieval_chain与JinaEmbeddings的最佳实践

LangChain与JinaEmbeddings深度整合&#xff1a;从避坑到性能优化的全流程指南 在构建基于大语言模型的检索增强生成(RAG)系统时&#xff0c;LangChain框架与JinaEmbeddings的组合已经成为许多开发者的首选方案。这种技术组合既能利用LangChain强大的流程编排能力&#xff0c;…...