【发布时间】:2014-11-28 16:10:47
【问题描述】:
我已经为通过 RMI 的 JMX 身份验证实现了 JMXAuthenticator,但是我不确定如何创建角色以允许只读/读写访问级别。例如,在JMXAuthenticator.authenticate 我有我的自定义身份验证逻辑,并希望它来确定访问角色。我尝试了以下方法,但在 JConsole 中执行操作时没有区别:
@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
和包含com.sun.management.jmxremote.access.file=PATH TO ACCESS FILE 的jmx.management.properties,我使用-Dcom.sun.management.config.file=PATH TO jmx.management.properties 运行应用程序。
但是,当我通过 JConsole 连接并以基本用户身份进行身份验证(只读访问)时,我可以访问 bean 上的设置器。我通过完整的service:jmx:rmi:... url 连接。
所以我的问题是
- 是否需要对我的 bean 中的设置器进行注释/执行任何操作以将它们指定为仅对管理员用户可见?
- 我是否没有正确构建
JMXAuthenticator返回的Subject对象? - 是否缺少任何其他配置/设置?
谢谢
编辑我的 MBean 只是一个基本的 POJO,其私有字段具有公共 getter 和 setter 以及一个其他公共方法。
【问题讨论】:
标签: java authentication jmx mbeans