SpringBoot-开发技巧-加密返回字段

思君令人老,岁月忽已晚。

1 前言

前文中已经讲解了使用 RSA 加密返回数据报文的分享,但是在某些情况下,需要加密的不是整个报文,而是报文中的某些字段,比如涉及到个人信息,身份证、姓名和手机号等信息,这些是需要进行加密返回,在经过授权或者认证之后才能经过解密展示全文。此外,在显示金额字段时,还可能对数据进行脱敏处理,这些都需要用到今天分析的内容,如何加密或者脱敏返回某些特定的字段。

2 实现分析

首先我们需要先明晰一下具体的需求,如下图所示,对个人信息比如姓名、邮箱、手机号、身份证等信息进行脱敏,只展示一部分的信息。

那么怎么能实现这个脱敏或者加密呢,写一个工具类,对每个返回的数据内容遍历并处理需要脱敏或者加密的字段呢,显然这个工作量很大,而且容易遗漏,如果变动其脱敏方法也很困难,这个需求和业务耦合度很高,所以这种方式非常的不推荐。

这里推荐的是一个 AOP 的做法,实现业务和脱敏需求的剥离, AOP 大家都很熟悉,面向切面编程,其实处理脱敏或者加密也是在方法返回之前进行处理,这个做法的非常推荐的,但是我们要怎么处理具体的脱敏字段呢,这就用到了 java 中的注解,通常我们使用注解是在方法上,诸如实现业务日志的记录,我们可以自定义注解,加在需要脱敏或者加密的返回类的属性上,这样在切面中拦截注解,根据其特征来处理脱敏或者加密。

3 代码分析

如上所述,我们需要定义一个注解,用于标记需要脱敏或者加密的属性,如下所示:

那么如何能够拦截到方法的返回值呢,这里需要用到 HandlerMethodReturnValueHandler,这是spring 中的一个 Handler, 可以捕获控制器层方法的返回值,具体做法如下图所示:

由于返回值的类型不统一,需要考虑各种可能性,最终通过判断来获取返回实体类,针对具体的返回实体进行处理。

获取到具体的实体类后,需要获取实体的每个字段,通过判断是否含有脱敏注解来进一步处理。默认情况下,需要按照脱敏来处理,根据试题配置的脱敏规则来处理字段值的脱敏。如果需要加密,则使用 DES 的对称加密来实现。

完成以上的配置后,还需要将该配置放入 spring 上下文中,如下图所示:

4 结果展示

完成以上的配置后,即可实现加密或者脱敏的功能,如下图所示:

使用注解的方式,可以很好的完成需求,同时也很方便调整脱敏的策略和加密方式,实现了业务和脱敏或者加密的分离,避免了重复的代码。

5 总结

在本文中,介绍了使用注解的方式完成返回值部分字段的加密和脱敏,这个技能点在日常的业务开发中会经常使用,尤其是在涉及个人信息的场景。还有一种方式是在通过 orm 框架读取数据时进行处理,但是此种方式可能会阻碍正常业务的开展,脱敏的数据可能无法正常判断,所以还是推荐在返回结果数据时进行脱敏或者加密处理。本文中所涉及的代码已经上传至 github, 欢迎交流学习。项目地址 springboot-templet-start

相关推荐
Yvemil75 分钟前
《开启微服务之旅:Spring Boot Web开发举例》(一)
前端·spring boot·微服务
zjw_rp5 分钟前
Spring-AOP
java·后端·spring·spring-aop
TodoCoder26 分钟前
【编程思想】CopyOnWrite是如何解决高并发场景中的读写瓶颈?
java·后端·面试
星河梦瑾1 小时前
SpringBoot相关漏洞学习资料
java·经验分享·spring boot·安全
机器之心2 小时前
图学习新突破:一个统一框架连接空域和频域
人工智能·后端
计算机学长felix3 小时前
基于SpringBoot的“交流互动系统”的设计与实现(源码+数据库+文档+PPT)
spring boot·毕业设计
.生产的驴3 小时前
SpringBoot 对接第三方登录 手机号登录 手机号验证 微信小程序登录 结合Redis SaToken
java·spring boot·redis·后端·缓存·微信小程序·maven
顽疲3 小时前
springboot vue 会员收银系统 含源码 开发流程
vue.js·spring boot·后端
机器之心3 小时前
AAAI 2025|时间序列演进也是种扩散过程?基于移动自回归的时序扩散预测模型
人工智能·后端
撒呼呼3 小时前
# 起步专用 - 哔哩哔哩全模块超还原设计!(内含接口文档、数据库设计)
数据库·spring boot·spring·mvc·springboot