gpt4 book ai didi

java - 使用 Spring 4.2 注释和 ActiveMQ 对 @JmsListener 进行身份验证

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:56:42 25 4
gpt4 key购买 nike

尝试使用 Spring 4 和 ActiveMQ 实现非 XML JMS 监听器。我的问题是我的客户不断收到以下错误:

Setup of JMS message listener invoker failed for destination 'topic.FromJndiProperties' [...] 
Cause: The JMS connection has failed: Force close due to SecurityException on connect.
Cause: User name [null] or password is invalid.

所以到目的地的连接是用用户名和密码 null 建立的。我想我可能没有正确设置 destinationResolver 但我一直在研究如何解决这个问题。谁能帮我解决这个问题?

我的 AppConfig:

@Autowired
private Environment env;

@Autowired
private BeanFactory springContextBeanFactory;

@Bean
public DefaultJmsListenerContainerFactory myListenerContainerFactory() throws NamingException {

Properties props = new Properties();
props.setProperty(Context.INITIAL_CONTEXT_FACTORY, env.getProperty("java.naming.factory.initial"));
props.setProperty(Context.PROVIDER_URL, env.getProperty("java.naming.provider.url"));
props.setProperty(Context.SECURITY_PRINCIPAL, env.getProperty("java.naming.security.principal"));
props.setProperty(Context.SECURITY_CREDENTIALS, env.getProperty("java.naming.security.credentials"));

Context jndiContext = new InitialContext(props);;
ConnectionFactory connectionFactory = (ConnectionFactory) jndiContext.lookup("ConnectionFactory");

DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory();
factory.setConnectionFactory(connectionFactory);
factory.setDestinationResolver(new BeanFactoryDestinationResolver(springContextBeanFactory));
factory.setPubSubDomain(true);
factory.setSessionAcknowledgeMode(Session.AUTO_ACKNOWLEDGE);

return factory;
}

听众:

@JmsListener(containerFactory = "myListenerContainerFactory", destination = "topic.FromJndiProperties")
public void receiveMessage(String message) {
try {
System.out.println("Received <" + message + ">");
} catch (Exception e) {
e.printStackTrace();
}
}

最佳答案

ConnectionFactoryTopicConnectionFactoryQueueConnectionFactory 都有两种创建连接的方法(例如 ConnectionFactory.createConnection()ConnectionFactory.createConnection(用户名、密码)

似乎 @JmsListener 注释总是创建一个连接,而不通过零参数方法传递凭据。

我使用了 spring 的 UserCredentialsConnectionFactoryAdapter包装我的 ConnectionFactory 以便与 @JmsListener 一起使用,以便它在创建连接时传递凭据

关于java - 使用 Spring 4.2 注释和 ActiveMQ 对 @JmsListener 进行身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35631411/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com