背景
最近接到一个需求,因为数据来自外来机构。数据加密要求比较严格,数据进行了双重加密。具体情况为
数据在第一层加密为全数据加密,以及签名,数据格式如下
{
"data":"encryptData",
"sign":"signMessage"
}
其中data为全加密的数据,sign为data解密后,原始数据的签名。
对数据进行第一层解密后,会得到一个数据,这个数据中还存在一些敏感的字段,这些字段进行了第二次加密。数据类似于
{
"name":"encryptName",
"idCard":"encryptIdCard"
}
此时数据需要二层解密。
思考过程
首先,数据在第一层加密处,为整体的数据的加密。如果将数据直接在controller层进行接收处理,那么会导致代码散乱,此时首先想到的是拦截controller注解。但是如果拦截controller注解,会导致接收实体类仍然为map,这和面向对象不符合。所以此方案pass。
那么数据进入的流程是什么样呢,突然想到,spring 存在一个可以重复读的request。那么我们用这个思想,在数据进入reqeust但是还没进入反序列化处理就可以了。具体怎么干呢
创建Filter
既然要自己定义request,那肯定要先用filter。从filter转换后