如何通过编程设置用户名和密码来连接到 ActiveMQ 服务器?

Posted

技术标签:

【中文标题】如何通过编程设置用户名和密码来连接到 ActiveMQ 服务器?【英文标题】:How to connect to an ActiveMQ server by setting the username and password programmatically? 【发布时间】:2017-08-17 17:31:00 【问题描述】:

我创建了一个 ActiveMQ 服务器来发送一些消息。我使用 Apache Activemq 版本 5.14.4 当我尝试连接到 ActiveMQ 服务器时,我想被要求输入用户名和密码,这就是为什么我在 activemq.xml 中添加了一个简单的身份验证插件,如下所示。

String username = "admin";
String password = "anything";
ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory("tcp://localhost:61616");
        factory.setUserName(username);
        factory.setPassword(password);
        factory.setTrustedPackages(Arrays.asList("com.h4p.server"));
        Connection connection = null;
        Session session = null;
        Destination destination = null;
        try 
            connection = factory.createConnection();
            connection.start();
            session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
            destination = session.createQueue("myQueue");
         catch (JMSException e) 
            e.printStackTrace();
        
...

在代理元素中,我使用 SimpleAuthentificationPlugin 添加了一个安全级别:

    <simpleAuthenticationPlugin anonymousAccessAllowed="false">
        <users>
            <authenticationUser username="admin" password="anything" groups="admins"/>
        </users>
    </simpleAuthenticationPlugin>

    <authorizationPlugin>
        <map>
            <authorizationMap>
                <authorizationEntries>
                    <authorizationEntry queue="myQueue" write="admins" read="admins" admin="admins" />  
                    <authorizationEntry topic="ActiveMQ.Advisory.>" write="admins" read="admins" admin="admins" />                      
                </authorizationEntries>
            </authorizationMap>
        </map>
    </authorizationPlugin>I

如您所见,我在工厂级别设置了用户名和密码,尽管我可以在创建连接时设置它们。

哪个选项最好,将用户名和密码设置为工厂或创建连接时?

ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory("tcp://localhost:61616");
        factory.setUserName(username);
        factory.setPassword(password);

connection = factory.createConnection(username, password);

无论如何,我无法连接到 ActiveMQ 服务器:

javax.jms.JMSException: Could not connect to broker URL: tcp://localhost:61616. Reason: java.net.ConnectException: Connection refused: connect

\apache-activemq-5.14.4\conf 目录下的文件有如下配置: users.properties:admin=admin,groups.properties:admins=admin 和 credentials.properties:

activemq.username=admin
activemq.password=anything

如果我注释了simpleAuthenticationPlugin和authorizationPlugin,那么我可以连接到服务器,发送我想要发送的消息并使用它们。此外,如果我删除 anonymousAccessAllowed="false" 或将其设置为 true,我可以连接到服务器、发送和使用消息,但这不是我想要的。

您能否告诉我如何通过以编程方式设置用户名和密码来连接到配置了该安全级别的 ActiveMQ 服务器?

【问题讨论】:

在您的情况下,您所说的配置用户和组属性文件不用于连接客户端,它们用于 jaasAuthenticationPlugin 或 jmx。能发一下activemq日志吗 【参考方案1】:

解决了!

问题是我没有将插件放入&lt;plugin&gt;&lt;/plugin&gt; 元素中。 现在,配置是:

<plugins>
    <simpleAuthenticationPlugin anonymousAccessAllowed="false">
        <users>
            <authenticationUser username="admin" password="anything" groups="admins, producers, consumers"/>
        </users>
    </simpleAuthenticationPlugin>


    <authorizationPlugin>
        <map>
            <authorizationMap>
                <authorizationEntries>
                    <authorizationEntry queue="myQueue" read="consumers" write="producers" admin="producers,consumers,admins" />    
                    <authorizationEntry topic="ActiveMQ.Advisory.>" read="consumers" write="producers" admin="producers,consumers,admins"/>
                </authorizationEntries>
            </authorizationMap>
        </map>
    </authorizationPlugin>
</plugins>

连接我使用:

ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory(username,password,"tcp://localhost:61616");

【讨论】:

以上是关于如何通过编程设置用户名和密码来连接到 ActiveMQ 服务器?的主要内容,如果未能解决你的问题,请参考以下文章

C#:如何在启用 SSL 的情况下连接到 Active Directory?

Redis如何设置密码?

如何在 Linux 上使用 pyodbc 对 Active Directory 帐户使用用户/密码身份验证

Kali-linux攻击路由器

如何以编程方式扫描、查找和连接到开放的 wifi AP?

Active Directory 如何在设置新密码时比较用户以前的密码?