Java JMX获取登录用户

时间:2012-10-17 07:33:48

标签: java spring security jmx

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

现在我想从我的MBean 中获取一些其他操作的用户名。是否有可能在JMX技术中完成?如果是的如何? :)

示例:

public class MyMBean {

    public void myOp() {

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

        makeSomethingWithUserName ( userName );

        doMyStuffHere();
    }
}

我发现this tutorial但它似乎是特定于玻璃鱼的,我正在寻找基于简单java的解决方案。

非常感谢,祝你有个愉快的一天

1 个答案:

答案 0 :(得分: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 "";
}