【发布时间】:2019-01-13 04:48:40
【问题描述】:
我想使用 RabbitMQ 在部署在不同网络上并由不同人维护的多个应用程序之间进行通信。作为消息的接收者(消费者),我想确信消息的发送者(生产者)就是他声称的那个人。我能想到的最佳方法是消息签名和这些签名的验证。因为这是我第一次用 RabbitMQ 做一些事情,所以我有点纠结于如何实现它。
消息发送者和接收者是 Java 应用程序。我决定使用 Spring AMQP 模板让事情变得更容易一些。在一个完美的场景中我想在它已经是一个字节数组/流时以某种方式截取消息,签署这个 blob 并将签名附加为消息头。在接收端,我想在反序列化之前再次拦截消息,验证来自标头的签名与 blob,如果一切正常,然后反序列化它。但我还没有在 Spring-Rabbit 中找到任何方法来执行此操作.
Spring-Rabbit中有MessagePostProcessor的概念,但是调用这个的时候,消息还是没有完全序列化。这似乎是我想象的某事会在某个地方被某人解决,因为这感觉像是一个常见的问题,但我的研究让我徒劳无功。
目前我使用AmqpTemplate.convertAndSend 发送消息,使用@RabbitListener 接收消息。但我并没有被春天困住。我可以使用任何我喜欢的东西。这似乎是一个简单的开始方式。我正在使用 Jackson 对 JSON 进行消息序列化。 问题是如何在正确的地方拦截发送和接收。
备份计划是将数据和签名都放在正文中,并用包装器将它们连接起来,但这意味着双重序列化并且不像我希望的解决方案那样干净。
那么有没有人有这方面的经验,也许可以告诉我如何解决这个问题?
【问题讨论】:
标签: java rabbitmq spring-rabbit