问题描述
当前通过覆盖JmsConnectionFactory(qpid apache)的setRemoteURI(“”)创建amqp连接 application-context.xml
<bean id="amqpConfig" class="org.apache.camel.component.jms.JmsConfiguration">
<property name="connectionFactory">
<bean class="com.abc.AMQPSConnectionFactory">
</bean>
</property>
</bean>
<bean id="amqp" class="org.apache.camel.component.amqp.AMQPComponent">
<property name="testConnectionOnStartup" value="true" />
<property name="configuration" ref="amqpConfig" />
</bean>
我的AMQPSConnectionFactory-当前正在通过覆盖JmsConnectionFactory的setRemoteURI(“”),使用给定的KEYSTORELOCATION,KEYSTOREPASSWORD,KEYSTORETYPE创建amqp连接,如图所示
public class AMQPSConnectionFactory extends JmsConnectionFactory {
public AMQPSConnectionFactory() {
setRemoteURI("URL?jms.prefetchPolicy.queuePrefetch=true&transport.keyStoreLocation=KEYSTORELOC&transport.keyStorePassword=KEYSTOREPASSWORD&transport.keyStoreType=KEYSTORETYPE&transport.trustAll=true&transport.enabledProtocols=TLSv1.2");
}
}
如何通过在运行时传递以64位编码的CERTIFICATE字符串(而不是KEYSTORELOCATION),该证书的以64位编码的PASSWORD(代替KEYSTOREPASSWORD)和KEYSTORETYPE来创建amqp连接?
问题:我无法将证书保留在某个路径上(在uri中提供KEYSTORELOCATION),但需要使用证书字符串本身
解决方法
与您要查询的内容最接近的匹配项是SSLContext覆盖,它允许您提供自己的SSLContext,供客户端在SSL握手期间使用。没有直接向连接工厂提供证书的机制,我怀疑是否会添加任何此类机制。
JmsConnectionFactory factory = new JmsConnectionFactory("amqps://localhost:5673");
factory.setSslContext(<your-own-context>);