RabbitMQ 消息签名

我想使用 RabbitMQ 在部署在不同网络上并由不同人员维护的多个应用程序之间进行通信。作为消息的接收者(消费者),我想确信消息的发送者(生产者)就是他声称的那个人。我能想到的最佳方法是消息签名和验证这些签名。由于这是我第一次用 RabbitMQ 做某事,我有点被困在如何实现这一点上。

消息发送者和接收者是 Java 应用程序。我决定使用 Spring AMQP 模板来让事情变得更容易一些。在一个完美的场景中,当它已经是一个字节数组/流时,我想以某种方式拦截消息,签署这个 blob 并将签名附加为消息头。在接收端,我想在反序列化之前再次拦截消息,根据 blob 验证来自标头的签名,如果一切正常,则反序列化它。但是我还没有在 Spring-Rabbit 中找到任何方法来做到这一点。有一个概念MessagePostProcessor在 Spring-Rabbit 中,但是当调用 this 时,消息仍然没有完全序列化。似乎我想象的某件事会被某人解决,因为这感觉像是一个普遍的问题,但我的研究让我空手而归。

目前我AmqpTemplate.convertAndSend用于消息发送和@RabbitListener消息接收。但我并没有被春天困住。我可以使用任何我喜欢的。这似乎是一种简单的开始方式。我正在使用 Jackson 对 JSON 进行消息序列化。问题是如何在正确的地方拦截发送和接收。

备份计划是将数据和签名都放在正文中并用包装器将它们连接起来,但这意味着双重序列化并且不像我希望的解决方案那么干净。

那么有没有人有这方面的经验,也许可以建议我如何解决这个问题?


潇湘沐
浏览 141回答 1
1回答

慕标琳琳

MessagePostProcessorSpring-Rabbit 中有一个概念,但是调用 this 时,消息仍然没有完全序列化。我不确定你的意思是什么;这MessagePostProcessor正是您所需要body的byte[],它将被发送到 RabbitMQ。您可以使用convertAndSend采用 MPP的重载方法,或将您的 MPP 添加到模板(在 中beforeSendMessagePostProcessors)。在接收端,监听器容器工厂可以配置为afterReceiveMessagePostProcessors. 再次; 的body是在byte[]从接收到的RabbitMQ。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java