Я реализовал JMXAuthenticator
для аутентификации JMX через RMI, однако я не уверен, как создавать роли, позволяющие уровни доступа для чтения/чтения. Например, в JMXAuthenticator.authenticate
у меня есть пользовательская логика проверки подлинности и хочу, чтобы это определяло роль доступа. Я попытался следующие, но это не имеет никакого значения при выполнении операций в JConsole:Аутентификация JMX - операции MBean на основе ролей
@Override
public Subject authenticate(Object credentials) {
Subject subject = new Subject();
JMXPrincipal p;
//...my logic
String accessLevel = myCustomLogic();
if (accessLevel.equals("admin")) {
p = new JMXPrincipal("adminrole");
} else {
p = new JMXPrincipal("basicrole");
}
subject.getPrincipals().add(p);
return subject;
}
Я тогда создан файл доступа, jmxaccess.properties
, содержащий
adminuser readwrite
basicuser readonly
и jmx.management.properties
, который содержит com.sun.management.jmxremote.access.file=PATH TO ACCESS FILE
и я бегу приложение с -Dcom.sun.management.config.file=PATH TO jmx.management.properties
.
Однако, когда я подключаюсь через JConsole и аутентифицируюсь как basicuser (доступ только для чтения), я могу получить доступ к сеттерам в компоненте. Я подключаюсь через полный адрес service:jmx:rmi:...
.
Так что мои вопросы
- мне нужно аннотировать/сделать что-нибудь для сеттеров в моем компоненте, чтобы указать их как видимый только пользователям администратора делать?
- Я не строю
Subject
объект, который возвращаетJMXAuthenticator
? - Отсутствует какая-либо другая конфигурация/настройка?
Благодаря
Редактировать Мой MBean только основные POJO с частными полями, которые имеют государственные методы получения и установки, плюс еще один публичный метод.