Создайте уровень безопасности с помощью аутентификации при подключении к месту назначения ActiveMQ.

Я использую Apache Activemq версии 5.14.4 для отправки некоторых сообщений в очередь и их чтения. Я хочу реализовать уровень безопасности, чтобы при подключении к месту назначения меня попросили указать имя пользователя и пароль.

Прочтите официальную документацию по безопасности ActiveMQ и просмотрите множество примеров, включая следующие: example1, example2, я решил использовать плагин Simple Authentication Plugin для достижения этой цели.

Итак, в моем activemq.xml внутри элемента брокера я написал плагин:

<broker xmlns="http://activemq.apache.org/schema/core" brokerName="localhost" dataDirectory="${activemq.data}">

    <simpleAuthenticationPlugin>
        <users>
            <authenticationUser username="Admin01" password="anything" groups="users,admins"/>
        </users>
    </simpleAuthenticationPlugin>


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

При этом я ожидал, что меня спросят об имени пользователя и пароле, чтобы подключиться к месту назначения и использовать сообщения из очереди.

Я создаю соединение и пункт назначения следующим образом:

String username = "Admin01";
String password = "anithing"
ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory("tcp://localhost:61616");
factory.setTrustedPackages(Arrays.asList("myClass.package_name"));
Connection connection = null;
Session session = null;
Destination destination = null;
    try {
        connection = factory.createConnection(username, password);
        connection.start();
        session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
        destination = session.createQueue("myQueue");
...

Брокер ActiveMQ создается, и когда происходят события, которые я хочу отправить, они отправляются в myQueue. (Я также пытался не устанавливать какое-либо имя пользователя и пароль для фабрики с помощью factory.setPassword() и factory.setUserName() или устанавливать имя пользователя и пароль только для соединения или и то, и другое, и когда я не устанавливаю любое имя пользователя и пароль).

Что ж, если я хочу использовать сообщения из очереди, я намеренно не устанавливаю пароль, и исключения не создаются, и сообщения потребляются. (Я ожидал, что будет выброшено исключение с запросом имени пользователя и пароля. Также я пробовал с неправильным именем пользователя и паролем).

    private void consumeMessage() {
        String userName = "Admin01";
        String password = "anything";
        ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory("tcp://localhost:61616");
//      factory.setUserName(userName);
//      factory.setPassword(password);
        factory.setTrustAllPackages(true);
        Destination destination = null;
        try {
            connection = factory.createConnection();
            session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
            destination = session.createQueue("myQueue");
            consumer = session.createConsumer(destination);
            consumer.setMessageListener(this);
            connection.start();
        }catch(JMSException e) {
            e.printStackTrace();
        } 
    }

Я переопределил файл учетных данных.properties: Значения по умолчанию:

activemq.username=system
activemq.password=manager
guest.password=password

Переопределено:

activemq.username=Admin01
activemq.password=anything

Я также переопределил файлы: файл groups.properties на admins=Admin01 и users.properties на admin=Admin01, но пароль по-прежнему не запрашивался.

Все упомянутые выше файлы находятся в каталоге \apache-activemq-5.14.4\conf.

Что я могу сделать, чтобы реализовать этот уровень безопасности в ActiveMQ, чтобы, когда я хочу подключиться к месту назначения, чтобы использовать сообщения из «myQueue», запрашивать имя пользователя и пароль?


person Nelly Junior    schedule 24.03.2017    source источник


Ответы (1)


По умолчанию <simpleAuthenticationPlugin anonymousAccessAllowed="false"> запретить анонимный доступ.

person Hassen Bennour    schedule 24.03.2017
comment
Добавлен ‹simpleAuthenticationPlugin анонимныйAccessAllowed=false›, но он не работает. - person Nelly Junior; 24.03.2017
comment
Да, извините, это поведение по умолчанию, вы перезапускали ActiveMQ после каждого изменения? - person Hassen Bennour; 24.03.2017
comment
Спасибо! Теперь не могу подключиться. Думаете неправильно ставить юзера и пароль заводские и на подключение тоже? java.net.ConnectException: соединение отклонено: подключение - person Nelly Junior; 24.03.2017
comment
попробуйте добавить ‹authorizationEntry theme=ActiveMQ.Advisory.› read=all write=all admin=all/› - person Hassen Bennour; 24.03.2017
comment
user/pwd лучше установить на заводском уровне, так же устанавливаются и для подключения - person Hassen Bennour; 24.03.2017
comment
Давайте продолжим обсуждение в чате. - person Nelly Junior; 24.03.2017