2

我有一个由 JVM 进程启动的 JMX 服务器,可以选择保护它(现在它不是,所以我准备考虑任何可扩展的方式)。例如,作为一个选项,我查看了官方教程,现在可以使用用户/密码身份验证。MBean 通过 spring 部署(使用注释方法)。

现在我想我的 MBean 中获取一些附加操作的用户名。完全可以用 JMX 技术来做吗?如果是怎么办?:)

例子:

public class MyMBean {

    public void myOp() {

        String userName = ... ?;  // or whatever object that can bring me the name

        makeSomethingWithUserName ( userName );

        doMyStuffHere();
    }
}

我找到了本教程,但它似乎是 glassfish 特定的,我正在寻找基于 java 的简单解决方案。

非常感谢,祝你有美好的一天

4

1 回答 1

1

这应该有效,但只有在用户通过身份验证时才会填写主题。本地 JMX 连接将给出一个空的主题!

private String getUserName() {
    AccessControlContext acc = AccessController.getContext();
    Subject subject = Subject.getSubject(acc);
    if (subject != null)  {
    Set<JMXPrincipal> principals = subject.getPrincipals(JMXPrincipal.class);
    JMXPrincipal principal = principals.iterator().next();
    return principal.getName();
    }
    return "";
}
于 2012-10-17T08:46:07.303 回答