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

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

1 前言

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

2 实现分析

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

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

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

3 代码分析

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

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

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

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

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

4 结果展示

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

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

5 总结

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

相关推荐
Smilejudy5 分钟前
不可或缺的相邻引用
后端
惜鸟5 分钟前
Elasticsearch 的字段类型总结
后端
rebel6 分钟前
Java获取excel附件并解析解决方案
java·后端
微客鸟窝8 分钟前
Redis常用数据类型和命令
后端
熊猫片沃子10 分钟前
centos挂载数据盘
后端·centos
微客鸟窝11 分钟前
Redis配置文件解读
后端
不靠谱程序员13 分钟前
"白描APP" OCR 软件 API 逆向抓取
后端·爬虫
小华同学ai15 分钟前
6.4K star!企业级流程引擎黑马,低代码开发竟能如此高效!
后端·github
Paladin_z18 分钟前
【导入导出】功能设计方案(Java版)
后端
数据攻城小狮子19 分钟前
Java Spring Boot 与前端结合打造图书管理系统:技术剖析与实现
java·前端·spring boot·后端·maven·intellij-idea