Java的JMX获取登录的用户(Java JMX get the logged in user)

2019-10-17 07:53发布

我有JVM进程启动一个JMX服务器可以可选地固定(现在它不是,所以我愿意考虑任何扩展的方式为它)。 例如作为一个选项我看着官方教程和其确定为目前使用用户名/密码认证。 的MBean经由弹簧展开(注释方法使用)。

现在,我想我的MBean 获取用户名对一些额外的操作。 是否有可能在JMX技术做呢? 如果是如何? :)

例:

public class MyMBean {

    public void myOp() {

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

        makeSomethingWithUserName ( userName );

        doMyStuffHere();
    }
}

我发现这个教程 ,但它似乎是GlassFish的具体,我期待为纯基于Java的解决方案。

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

Answer 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 "";
}


文章来源: Java JMX get the logged in user