RabbitMQ la firma de mensajes

tarmo:

Quiero usar RabbitMQ para la comunicación entre múltiples aplicaciones que se despliegan en redes diferentes y son mantenidos por diferentes personas. Como receptor de un mensaje (consumidor) Quiero estar convencido de que el emisor del mensaje (productor) es quien dice ser. Mejor enfoque que se me ocurre para este mensaje sería firma y verificación de esas firmas. Como esta es mi primera vez haciendo algo con RabbitMQ, estoy un poco atascado sobre cómo implementar esto.

Remitentes de mensajes y receptores son aplicaciones Java. He decidido utilizar la plantilla de Primavera AMQP para hacer las cosas un poco más fácil para mí. En un escenario perfecto me gustaría de alguna manera interceptar el mensaje cuando ya es una matriz de bytes / arroyo, firmar esta mancha y adjuntar la firma como un encabezado del mensaje. En el extremo de recepción me gustaría volver a interceptar el mensaje antes de que sea deserialized, verificar la firma de la cabecera contra la mancha y si todo está bien, entonces deserializar ella. Pero no he encontrado ninguna manera en primavera-conejo para hacer esto. Hay un concepto deMessagePostProcessoren la primavera-conejo, pero cuando esto se invoca, el mensaje aún no está totalmente serializado. Parece que algo que me imaginaba sería resuelto por alguien en algún lugar, ya que se siente como un problema común de tener, pero mi investigación me ha dejado con las manos desnudas.

Actualmente estoy usando AmqpTemplate.convertAndSendpara el envío de mensajes y @RabbitListenerpara el mensaje de recepción. Pero no me quedé con la primavera. Puedo usar lo que me gusta. Nos pareció que era una manera fácil de ponerse en marcha. Estoy usando Jackson por mensaje de serialización a / de JSON. El problema es cómo interceptar el envío y recepción en el lugar correcto.

plan de copia de seguridad es poner los datos y la firma en el cuerpo y las articulaciones con un envoltorio, pero esto significaría doble serialización y no es tan limpia como me gustaría que la solución sea.

Así que alguien tiene experiencia con estas cosas y puede quizá me puede aconsejar sobre la manera de abordar el problema?

Gary Russell:

Hay un concepto de MessagePostProcessorla primavera-conejo, pero cuando esto se invoca, el mensaje aún no está totalmente serializado.

No estoy seguro de lo que quiere decir con eso; el MessagePostProcessores exactamente lo que necesita el bodyes el byte[]que será enviado a RabbitMQ. Puede utilizar una sobrecarga convertAndSendmétodo que toma una MPP, o añadir su MPP a la plantilla (en el beforeSendMessagePostProcessors).

En el lado receptor, la fábrica de envases oyente puede ser configurado con afterReceiveMessagePostProcessors. De nuevo; el bodyes el byte[]recibidas de RabbitMQ.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=176148&siteId=1
Recomendado
Clasificación