From a11fb315d7671fe41f1c98a14fc28fc3e9c3b47b Mon Sep 17 00:00:00 2001 From: gaoqr <13665037151@163.com> Date: Wed, 12 Mar 2025 18:02:39 +0800 Subject: [PATCH] =?UTF-8?q?rabbitmq=E9=85=8D=E7=BD=AE=E6=94=AF=E6=8C=81pub?= =?UTF-8?q?licKey=E8=A7=A3=E5=AF=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ChenfengRabbitMQAutoConfiguration.java | 41 +++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/cf-framework/cf-spring-boot-starter-mq/src/main/java/com/cf/imes/framework/mq/rabbitmq/config/ChenfengRabbitMQAutoConfiguration.java b/cf-framework/cf-spring-boot-starter-mq/src/main/java/com/cf/imes/framework/mq/rabbitmq/config/ChenfengRabbitMQAutoConfiguration.java index 191a84c2e..36a70a543 100644 --- a/cf-framework/cf-spring-boot-starter-mq/src/main/java/com/cf/imes/framework/mq/rabbitmq/config/ChenfengRabbitMQAutoConfiguration.java +++ b/cf-framework/cf-spring-boot-starter-mq/src/main/java/com/cf/imes/framework/mq/rabbitmq/config/ChenfengRabbitMQAutoConfiguration.java @@ -1,18 +1,28 @@ package com.cf.imes.framework.mq.rabbitmq.config; +import com.cf.imes.framework.common.util.encrypt.AesUtils; import com.cf.imes.framework.mq.rabbitmq.constant.RabbitMqConstants; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; import org.springframework.amqp.core.Binding; import org.springframework.amqp.core.BindingBuilder; import org.springframework.amqp.core.DirectExchange; import org.springframework.amqp.core.FanoutExchange; import org.springframework.amqp.core.Queue; import org.springframework.amqp.core.QueueBuilder; +import org.springframework.amqp.rabbit.connection.CachingConnectionFactory; +import org.springframework.amqp.rabbit.connection.RabbitConnectionFactoryBean; import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter; import org.springframework.amqp.support.converter.MessageConverter; +import org.springframework.beans.factory.ObjectProvider; +import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.autoconfigure.AutoConfiguration; +import org.springframework.boot.autoconfigure.amqp.CachingConnectionFactoryConfigurer; +import org.springframework.boot.autoconfigure.amqp.ConnectionFactoryCustomizer; +import org.springframework.boot.autoconfigure.amqp.RabbitConnectionFactoryBeanConfigurer; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Primary; import java.util.HashMap; import java.util.Map; @@ -31,6 +41,37 @@ import static com.cf.imes.framework.mq.rabbitmq.constant.RabbitMqConstants.ORDER @ConditionalOnClass(name = "org.springframework.amqp.rabbit.core.RabbitTemplate") public class ChenfengRabbitMQAutoConfiguration { + @Value("${chenfeng.encrypt.publicKey:}") + private String publicKey; + + /** + * 参考 org.springframework.boot.autoconfigure.amqp.RabbitAutoConfiguration 的 rabbitConnectionFactory 方法 + */ + @Bean + @Primary + CachingConnectionFactory rabbitConnectionFactory( + RabbitConnectionFactoryBeanConfigurer rabbitConnectionFactoryBeanConfigurer, + CachingConnectionFactoryConfigurer rabbitCachingConnectionFactoryConfigurer, + ObjectProvider connectionFactoryCustomizers) throws Exception { + + RabbitConnectionFactoryBean connectionFactoryBean = new RabbitConnectionFactoryBean(); + rabbitConnectionFactoryBeanConfigurer.configure(connectionFactoryBean); + connectionFactoryBean.afterPropertiesSet(); + com.rabbitmq.client.ConnectionFactory connectionFactory = connectionFactoryBean.getObject(); + + if (StringUtils.isNotEmpty(publicKey)) { + connectionFactory.setUsername(AesUtils.decrypt(connectionFactory.getUsername(), publicKey)); + connectionFactory.setPassword(AesUtils.decrypt(connectionFactory.getPassword(), publicKey)); + } + connectionFactoryCustomizers.orderedStream() + .forEach((customizer) -> customizer.customize(connectionFactory)); + + CachingConnectionFactory factory = new CachingConnectionFactory(connectionFactory); + rabbitCachingConnectionFactoryConfigurer.configure(factory); + + return factory; + } + /** * Jackson2JsonMessageConverter Bean:使用 jackson 序列化消息 */