2011-01-24 2 views
1

Я изучаю JMX некоторое время, но я застрял.Сессия клиента JMX

У меня есть приложение, которое предоставляет некоторые функции удаленным клиентам через JMX, хотя существующие функции безопасности могут быть достаточными, в большинстве случаев мое приложение использует инфраструктуру Apache Shiro в качестве бэкэнд безопасности.

Моя проблема заключается в том, что я не собираюсь собирать серверы данных клиента. Сиро нуждается в способе идентификации клиента (субъекта), обычно исполняемый поток связан с субъектом, но онлайн-документация JMX не дает большого представления о модели потоков удаленных JMX.

Как я могу связать клиента с потоком или есть способ получить данные клиента внутри взаимодействующих MBeans?

ответ

0

После изучения и испытания различных методов; есть два победителя:

1- Новая функция ClientContext, которая будет частью Java 7: Java 7 еще не завершена, а ClientContext будет разорвать обратную совместимость.

2- Прикрепление Сиро в зависимости от AccessControlContext: Это решение, которое я выбираю, механизм поиска объекта по умолчанию Shiro не рассматривает контекст управления доступом Java. Я давно проверил тест, чтобы проверить это, но это не сработало. Теперь я знаю, почему: по умолчанию вызов SecurityUtils.getSubject() присоединяет извлеченный объект к текущему вызывающему потоку, но этот подход бесполезен, поскольку потоки могут быть разделены между клиентами. Но AccessControlContext гораздо более мощный, и похоже, что JMX прекрасно играет с ним; ваш контекст управления доступом (который аутентифицируется во время входа в систему JMXAuthenticator) может быть доступен из MBeanServerForwarder или даже внутри вашего MBean. Я тестировал это с несколькими клиентами, получая их основной, он просто работает.

Редактировать: Как я прикрепляю Shiro к текущему AccessControlContext?

1- Создайте неприсоединившийся объект Shiro, используя класс строителя Subject.Builder.

2- аутентифицировать пользователя (с использованием метода регистрации субъекта Сиро и т.д.)

3- Создать изменяемый объект JAAS с одноплодной набор, содержащий объект Shiro как частные учетные данные.

4- Предоставлять тему JAAS к основной системе безопасности Java (например, возврат предмета внутри метода проверки подлинности, принадлежащий JMXAuthenticator в)

Вспомогательный класс может быть создан, чтобы упростить этот подход. Когда вам необходимо выполнить действие от имени объекта Shiro (для авторизации и т. Д.), Получите его из AccessControlContext и используйте один из методов Subject.execute .... Это можно выполнить внутри прокси-сервера или форвардера (например, MBeanServerForwarder).

+0

@Farrukh Najmi Добавлено подробное описание того, как я это делаю –

Смежные вопросы