关于java:一个注解搞定SpringBoot接口定制属性加解密

4次阅读

共计 1575 个字符,预计需要花费 4 分钟才能阅读完成。

前言

上个月公司另一个团队做的新我的项目上线后大体上运行稳固,但包含研发负责人在内的两个人在我的项目上线后立马就跳槽了,而后又交接给了我这个「垃圾回收人员」。

本周甲方另一个厂家的监控平台扫描到咱们这个我的项目某些接口的一些敏感信息没有做加密,要求咱们立马解决。

查看了一下发现还真是这样,手机、身份证号什么的都没脱敏,心里登时一万头神兽在奔流。

还好,我有长期应答这类突发事件的教训,间接写了一个自定义注解,而后在须要加解密的接口上加上,和前端一联调,欧克搞定,之后脸上放弃惨重,但心田淡定摸鱼,好不洒脱。

趁着摸鱼的闲暇,我把实现办法简化后用最易懂的形式分享进去,大家能够珍藏一下,哪天用得上能够捞进去瞅瞅,节俭点思考的工夫。

技术版本

<br/>

实现过程

1、引入依赖

2、实体类

咱们定义两个实体类,一个是模仿查问用户信息时接口响应返回的对象 UserInfo。

一个是保留用户时的申请对象 UserInfoReq

这样,咱们就能够别离来测试一下查问接口返回对象敏感属性加密的状况,和保留接口申请对象敏感属性解密的状况了。

3、yml 配置

这里,咱们次要加上密钥的自定义配置,便于灵便批改。

4、自定义注解

这里,咱们给注解定义了两个参数,别离是申请时要给哪些属性解密,以及响应时要给哪些属性加密,并别离给了默认值。

5、加解密工具类

加解密工具类咱们应用了 Hutool 提供的 AES 加解密工具

这里留神两点:

1)、工具类中获取 yml 配置,要加上 @component 注解,而后给变量设置 static,但 set 办法去掉 static,@Value 获取放在 set 办法上即可,否则不会失效;

2)、构建 AES 工具要放在 @PostConstruct 注解中,示意 Spring 容器初始化这个 Bean 之后加载的内容,不这样解决间接构建的话会抛出空指针异样。

6、AOP 切面

这里是自定义注解的 AOP 切面类,也是具体实现,核心思想还是利用 Java 的反射机制,其中的一些写法大体都是固定的,能够适当了解,不倡议过分领悟,免得造成困扰。

7、测试接口

首先,咱们来测试一下查问接口,针对返回对象的局部敏感属性进行加密。

这里,咱们设置 reqPropsName={},示意不对申请参数做加解密操作,设置 respPropsName={“phone”、”idCard”、”name”},示意对返回对象中的手机号、身份证号、姓名进行加密返回。

其次,咱们来测试一下保留接口,针对申请对象的局部已加密属性进行解密。

这里,咱们设置 reqPropsName={“phone”、”idCard”、”name”},示意对申请参数中的手机号、身份证号、姓名做解密操作,设置 respPropsName={},示意对返回对象不做加密操作。

保留接口执行后咱们间接返回这个对象就行,看看是不是曾经解密了。

8、成果

查问接口返回对象加密成果

保留接口申请对象解密成果

总结

自定义注解能够实现的性能很多,比方之前给大家写过的一篇防反复提交注解,重点是 AOP 的思维,写法大体上都是固定的。

这里的加解密注解仍然有局限性:

1)、只反对有明确公共返回对象的接口,比方这里的 Result;

2)、只反对 @RequestBody 申请对象,其余诸如多个 param 参数、Map 等模式都不反对,能够自行扩大;

尽管不完满,但大体上曾经够用,因为大部分 SpringBoot 我的项目都是遵循标准的,都会定义公共的返回对象,绝大部分申请接口也都是 @RequesetBody 来接管的。

AOP 切面的实现中,针对申请对象的类型也留下了口子,感兴趣的小伙伴能够下载源码自行扩大,拿来练习都是不错的抉择。

源码会在评论区中给进去哦~


原创文章纯手打,感觉有一滴滴帮忙就请举手之劳点个 珍藏 吧~

继续分享工作中的实在教训和心得体会,喜爱的话就点个 关注 吧~

更多最新技术文章可关注 GZH:【Java 分享客栈】

正文完
 0