spring boot 使用HttpServletRequestWrapper以及AbstractHttpMessageConverter 优雅的解决数据双重加解密

背景

最近接到一个需求,因为数据来自外来机构。数据加密要求比较严格,数据进行了双重加密。具体情况为
数据在第一层加密为全数据加密,以及签名,数据格式如下

{
"data":"encryptData",
"sign":"signMessage"
}

其中data为全加密的数据,sign为data解密后,原始数据的签名。

对数据进行第一层解密后,会得到一个数据,这个数据中还存在一些敏感的字段,这些字段进行了第二次加密。数据类似于

{
"name":"encryptName",
"idCard":"encryptIdCard"
}

此时数据需要二层解密。

思考过程

首先,数据在第一层加密处,为整体的数据的加密。如果将数据直接在controller层进行接收处理,那么会导致代码散乱,此时首先想到的是拦截controller注解。但是如果拦截controller注解,会导致接收实体类仍然为map,这和面向对象不符合。所以此方案pass。
那么数据进入的流程是什么样呢,突然想到,spring 存在一个可以重复读的request。那么我们用这个思想,在数据进入reqeust但是还没进入反序列化处理就可以了。具体怎么干呢

创建Filter

既然要自己定义request,那肯定要先用filter。从filter转换后

  • 8
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值