当前位置: 首页 > 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里

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • C++特殊类设计
  • SSA-SVM多变量回归预测|樽海鞘群优化算法-支持向量机|Matalb
  • 大模型基于指令的知识编辑:InstructEdit技术
  • 算法之递归和迭代
  • 学习记录第二十七天
  • XSS-跨站脚本攻击
  • uniapp中键盘抬起挤压界面
  • 笔记本一线品牌有哪些
  • VBA技术资料MF184:图片导入Word添加说明文字设置格式
  • Java TCP练习2
  • 文件上传-导引
  • P2858 [USACO06FEB] Treats for the Cows
  • WordPress建站之头像及字体错误修正
  • Git 常用命令与工作流程总结
  • 域自适应,你适应了嘛?
  • 【知识碎片】第三方登录弹窗效果
  • CAP 一致性协议及应用解析
  • create-react-app项目添加less配置
  • ES6 学习笔记(一)let,const和解构赋值
  • Javascripit类型转换比较那点事儿,双等号(==)
  • Lsb图片隐写
  • nginx 负载服务器优化
  • npx命令介绍
  • Python利用正则抓取网页内容保存到本地
  • Redux 中间件分析
  • Spring Boot快速入门(一):Hello Spring Boot
  • SSH 免密登录
  • web标准化(下)
  • 阿里云爬虫风险管理产品商业化,为云端流量保驾护航
  • 后端_ThinkPHP5
  • 机器学习 vs. 深度学习
  • 免费小说阅读小程序
  • 如何使用 OAuth 2.0 将 LinkedIn 集成入 iOS 应用
  • 如何邀请好友注册您的网站(模拟百度网盘)
  • 如何正确配置 Ubuntu 14.04 服务器?
  • 探索 JS 中的模块化
  • 吴恩达Deep Learning课程练习题参考答案——R语言版
  • 应用生命周期终极 DevOps 工具包
  • 【云吞铺子】性能抖动剖析(二)
  • ​ 无限可能性的探索:Amazon Lightsail轻量应用服务器引领数字化时代创新发展
  • ​渐进式Web应用PWA的未来
  • ​一文看懂数据清洗:缺失值、异常值和重复值的处理
  • # 利刃出鞘_Tomcat 核心原理解析(八)-- Tomcat 集群
  • #{}和${}的区别?
  • #【QT 5 调试软件后,发布相关:软件生成exe文件 + 文件打包】
  • #stm32驱动外设模块总结w5500模块
  • #前后端分离# 头条发布系统
  • #我与Java虚拟机的故事#连载02:“小蓝”陪伴的日日夜夜
  • (1综述)从零开始的嵌入式图像图像处理(PI+QT+OpenCV)实战演练
  • (9)YOLO-Pose:使用对象关键点相似性损失增强多人姿态估计的增强版YOLO
  • (附源码)spring boot校园健康监测管理系统 毕业设计 151047
  • (免费领源码)python#django#mysql公交线路查询系统85021- 计算机毕业设计项目选题推荐
  • (实战)静默dbca安装创建数据库 --参数说明+举例
  • (已解决)什么是vue导航守卫
  • (源码版)2024美国大学生数学建模E题财产保险的可持续模型详解思路+具体代码季节性时序预测SARIMA天气预测建模