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

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

1 前言

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

2 实现分析

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

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

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

3 代码分析

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

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

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

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

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

4 结果展示

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

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

5 总结

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

相关推荐
凡人的AI工具箱5 分钟前
15分钟学 Go 第 60 天 :综合项目展示 - 构建微服务电商平台(完整示例25000字)
开发语言·后端·微服务·架构·golang
小码的头发丝、8 分钟前
Spring Boot 注解
java·spring boot
午觉千万别睡过11 分钟前
RuoYI分页不准确问题解决
spring boot
java亮小白199713 分钟前
Spring循环依赖如何解决的?
java·后端·spring
2301_8112743130 分钟前
大数据基于Spring Boot的化妆品推荐系统的设计与实现
大数据·spring boot·后端
草莓base1 小时前
【手写一个spring】spring源码的简单实现--容器启动
java·后端·spring
Ljw...1 小时前
表的增删改查(MySQL)
数据库·后端·mysql·表的增删查改
编程重生之路1 小时前
Springboot启动异常 错误: 找不到或无法加载主类 xxx.Application异常
java·spring boot·后端
薯条不要番茄酱1 小时前
数据结构-8.Java. 七大排序算法(中篇)
java·开发语言·数据结构·后端·算法·排序算法·intellij-idea
politeboy2 小时前
k8s启动springboot容器的时候,显示找不到application.yml文件
java·spring boot·kubernetes