Клиентская сессия JMX - PullRequest
       15

Клиентская сессия JMX

1 голос
/ 24 января 2011

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

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

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

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

1 Ответ

0 голосов
/ 06 февраля 2011

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

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

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

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

1 - Создайте неприкрепленную тему Shiro, используя класс builderSubject.Builder.

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

3- Создание изменяемого субъекта JAAS с набором из одного элемента, содержащим тему Широ в качестве личных учетных данных.

4- Предоставьте JAAS, подчиненный базовой Системе безопасности Java (например, Верните субъект в методе аутентификации JMXAuthenticator)

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

...