【问题标题】:RabbitMQ message signingRabbitMQ 消息签名
【发布时间】: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


    【解决方案1】:

    Spring-Rabbit中有MessagePostProcessor的概念,但是调用这个的时候,消息还是没有完全序列化。

    我不确定你的意思; MessagePostProcessor 正是您需要的 body 是将发送到 RabbitMQ 的 byte[]。您可以使用采用 MPP 的重载 convertAndSend 方法,或将您的 MPP 添加到模板中(在 beforeSendMessagePostProcessors 中)。

    在接收端,监听容器工厂可以配置afterReceiveMessagePostProcessors。再次; body 是从 RabbitMQ 收到的 byte[]

    【讨论】:

    • 你是对的。我的错。我没有对 API 进行足够彻底的检查。
    猜你喜欢
    • 2017-09-11
    • 2019-06-21
    • 2011-08-04
    • 2013-08-09
    • 2012-05-29
    • 2019-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多