Статьи

Авторизация на уровне сообщений в Apache ActiveMQ

В то время как в последнем посте речь шла об Аутентификации на уровне брокера, этот пост о более строгой авторизации на уровне сообщений

У меня не было этой тонкой детальной авторизации в реальных проектах, но я хочу сделать это сам и дать читателям учебное пособие, чтобы расширить свои знания о безопасности в ActiveMQ и облегчить их начало с ним.

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

Создать проект Java с Maven

Вы должны начать с создания нового Java-проекта на основе Maven.

На следующем шаге я рекомендую добавить зависимость activemq-all maven (в той же версии, что и ваша установка activemq, в ваш проект, чтобы убедиться, что вы используете правильный импорт и классы).

Список всех версий activemq и соответствующих фрагментов зависимостей maven доступен здесь .

После этого пришло время добавить новый класс Java в ваш ранее созданный проект. Мой класс политики уровня сообщений выглядит следующим образом:

01
02
03
04
05
06
07
08
09
10
11
12
package com.schulz.bennet.activemq;
 
import org.apache.activemq.broker.ConnectionContext;
import org.apache.activemq.command.Message;
import org.apache.activemq.security.MessageAuthorizationPolicy;
 
public class MyMessageAuthorizationPolicy implements MessageAuthorizationPolicy {
 
    public boolean isAllowedToConsume(ConnectionContext ctx, Message m) {
        return ctx.getUserName().equals("admin");
    }
}

Примечание. Ваш класс должен реализовывать интерфейс MessageAuthorizationPolicy, и вам также необходимо добавить открытый логический метод isAllowedToConsume (…) в ваш класс. В этом методе вы можете реализовать свою логику, чтобы решить, кому разрешено использовать ваши сообщения. В моем примере администраторы могут использовать только.

Добавить политику в ActiveMQ

Откройте консоль, перейдите в папку вашего проекта и создайте приложение maven, вызвав команду mvn clean install.

Теперь пришло время скопировать файл jar из целевой папки проекта в папку lib вашей установки ActiveMQ, чтобы сделать его доступным для ActiveMQ. На последнем шаге настройки вы должны добавить следующий фрагмент в тег broker файла activemq.xml:

1
2
3
4
5
6
7
<messageAuthorizationPolicy>
 
<bean class="com.schulz.bennet.MyMessageMessageAuthorizationPolicy"
 
 
</messageAuthorizationPolicy>

Подсказка: не забудьте изменить его на полное имя класса, а не мое 😉

Протестируйте Политику, используя сообщения

Сначала вы должны запустить брокера с помощью следующей команды на вашей консоли:

1
./bin/activemq start

Проверьте, работает ли ваша политика, используя скрипт activemq для получения примеров сообщений:

1
./bin/activemq consumer --user admin --password password

Это должно работать, потому что ранее созданный класс политики позволяет пользователю admin принимать сообщения. Кроме того, не должно быть возможности получать сообщения от других пользователей, кроме пользователя admin. Вы можете проверить это, используя другого пользователя:

1
./bin/activemq consumer --user consumer --password password

Этот потребитель не должен потреблять ни одного сообщения.

Если у вас есть вопросы, вам нужен мой исходный код, видео на YouTube или что-то в этом роде, просто оставьте комментарий или свяжитесь со мной через твиттер. Веселитесь вместе с ActiveMQ!