提问者:小点点

如何通过JMX在ActiveMQ Artemis中按角色连接?


我有一个使用JavaFX的Java应用程序。我不明白如何按角色连接。以便每个角色都有自己的校对权限等。我知道如何向ActiveMQ添加角色,但我的应用程序似乎没有选择就连接到主角色。

public static MBeanServerConnection connectBroker(String brokerUrl) {

    QueueConnection connection = null;
    try {
        QueueConnectionFactory cf = new ActiveMQQueueConnectionFactory(brokerUrl);
        connection = cf.createQueueConnection();
        connection.start();
        JMXConnector connector = JMXConnectorFactory.connect(new JMXServiceURL(BuildGet.JMX_URL));

        return connector.getMBeanServerConnection();
    } catch (JMSException | IOException e) {
        throw new RuntimeException(e);
    }
}

如何通过角色连接?


共1个答案

匿名用户

你实际上并没有“按角色”连接你用用户名和密码连接。

角色是代理上组织用户的方式。您可以在给定角色中拥有一个或多个用户,然后将权限授予该角色作为一个整体。这使得组织用户和配置安全性变得更加容易。

请记住,消息传递用户(例如使用JMS的用户)的安全配置与管理用户(例如使用JMX的用户)是分开的。前者是通过broc. xml中的security-settings完成的,后者是通过管理.xml中的授权完成的。

在您的情况下,您可以为JMX连接提供凭据,如下所示:

         HashMap env = new HashMap();
         String[] creds = {"myUser", "myPassword"};
         env.put(JMXConnector.CREDENTIALS, creds);

         JMXConnector connector = JMXConnectorFactory.connect(new JMXServiceURL(BuildGet.JMX_URL), env);

需要注意的是,您的ConnectBroker方法在每次调用时都会泄漏JMS连接。这是因为您创建了一个JMS连接,但您没有关闭它或从方法中返回它。我建议从该方法中完全删除JMS连接,因为它没有真正的用途。