我的项目需要SSL身份验证机制为 EXTERNAL (仅使用SSL证书并避免在rabbitmq上使用用户名/密码)。对于connectionfactory bean,我们给了属性name =“saslConfig”value =“DefaultSaslConfig.EXTERNAL”,但是我们收到一个错误:“无法将类型[java.lang.String]的值转换为必需的类型[com.rabbitmq] .client.SaslConfig]属性'saslConfig':找不到匹配的编辑器或转换策略“。我们尝试了其他值,如value =“com.rabbitmq.client.DefaultSaslConfig.EXTERNAL”和value =“EXTERNAL”,但仍然存在错误。您能否查看下面的配置和日志,并向我提供您的建议。
Bean配置
<rabbit:connection-factory id="connectionFactory" connection-factory="clientConnectionFactory" host="x.y.z.m" port="5671"/>
<bean id="clientConnectionFactory" class="org.springframework.amqp.rabbit.connection.RabbitConnectionFactoryBean">
<property name="useSSL" value="true" />
<property name="saslConfig" value=com.rabbitmq.client.DefaultSaslConfig.EXTERNAL"/>
<property name="sslPropertiesLocation" value="classpath:/rabbitSSL.properties"/></bean>
日志
Caused by: java.lang.IllegalStateException: Cannot convert value of type [java.lang.String] to required type [com.rabbitmq.client.SaslConfig] for property 'saslConfig': no matching editors or conversion strategy found
at org.springframework.beans.TypeConverterDelegate.convertIfNecessary(TypeConverterDelegate.java:306)
at org.springframework.beans.AbstractNestablePropertyAccessor.convertIfNecessary(AbstractNestablePropertyAccessor.java:576)
答案 0 :(得分:0)
EXTERNAL
是一个静态变量,而不是枚举。
使用
"#{T(com.rabbitmq.client.DefaultSaslConfig).EXTERNAL}"
这是一个使用类型运算符(T
)的SpEL表达式来获取对静态的引用。
请参阅SpEL
答案 1 :(得分:0)
以下内容对我有用(来源:https://github.com/spring-projects/spring-boot/issues/6719#issuecomment-259268574):
@PostConstruct
public void init() {
if (rabbitProperties.getSsl().isEnabled() && rabbitProperties.getSsl().getKeyStore() != null) {
cachingConnectionFactory.getRabbitConnectionFactory().setSaslConfig(DefaultSaslConfig.EXTERNAL);
}
}