之前工作时遇到这样一个问题,在对加密数据解密后,通过JSONObject.parseObject(jsonStr, Objcet.class)转成相应的Bean,在验签的时候,结果验签失败,签名与原始数据不匹配的问题。在处理这个问题,来回折腾了好一会儿。通过打印结果才知道,原来JSONObject在发序列化的过程中,发生了顺序错乱,这才导致了验签失败。
解决办法很简单:
JSONObject.parseObject(jsonStr, Object.class, Feature.OrderedField)这样就ok了,Feature.OrderedField这个可以保证让string转成对象的过程中不会乱序,具体原理的话,大家可以跟一下fastJson的源码看一下。