gpt4 book ai didi

java - Jackson ObjectMapper - 指定对象属性的序列化顺序

转载 作者:IT老高 更新时间:2023-10-28 12:44:08 27 4
gpt4 key购买 nike

我正在实现一个 RESTful Web 服务,用户必须在请求中发送一个签名的验证 token ,以便我可以确保请求没有被中间人篡改。我目前的实现如下。

验证 token 是一个 VerifData 对象,序列化为字符串,然后进行散列和加密。

class VerifData {
int prop1;
int prop2;
}

在我的服务中,我将要序列化的数据放入 VerifData 的实例中,然后使用 Jackson ObjectMapper 对其进行序列化,并与验证 token 一起传递给验证引擎。

VerfiData verifData = new VerifData(12345, 67890);
ObjectMapper mapper = new ObjectMapper();
String verifCodeGenerated = mapper.writeValueAsString(verifData);

但似乎每次启动应用容器时,ObjectMapper映射成字符串的属性顺序都会发生变化。

例如:有一次

{"prop1":12345,"prop2":67890}

还有一次

{"prop2":67890,"prop1":12345}

因此,如果客户端已将 VerifData 实例序列化为第一个字符串,即使它是正确的,也有 50% 的机会失败。

有没有办法解决这个问题?我可以通过 ObjectMapper 指定要映射的属性的顺序(如升序)吗?或者有没有其他方法可以最好地实现这个验证步骤。客户端和服务器实现都是由我开发的。我使用 Java Security API 进行签名和验证。

最佳答案

注释很有用,但在任何地方都可能会很痛苦。您可以将整个 ObjectMapper 配置为以这种方式使用

jackson 的当前版本:

objectMapper.configure(MapperFeature.SORT_PROPERTIES_ALPHABETICALLY, true)

jackson 的旧版本:

objectMapper.configure(SerializationConfig.Feature.SORT_PROPERTIES_ALPHABETICALLY, true);

关于java - Jackson ObjectMapper - 指定对象属性的序列化顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27577701/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com