获取调用 JMX 操作的用户的详细信息

Get details of the user that invoked the JMX operation

我正在尝试获取调用 JMX 操作进行日志记录的用户的详细信息。我试过下面的代码。但这似乎不起作用,因为它 returns 每次都是空白。我做错了什么。或者有更好的方法吗?

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

以上代码确实有效。 我做了什么(对于所有可能像我一样疑惑的人):

1) 添加了以下 JVM args

-Dcom.sun.management.jmxremote.ssl=**false**
-Dcom.sun.management.jmxremote.authenticate=**true**
-Dcom.sun.management.jmxremote.access.file=**PATH-TO jmxremote.access**
-Dcom.sun.management.jmxremote.password.file=**PATH-TO jmxremote.password**

2) 在 jmxremote.access 文件中添加了以下条目

admin   readwrite \ create javax.management.monitor.*,javax.management.timer.* \               unregister
user   readonly

3) 在 jmxremote.password 文件中添加以下行

admin  adminPassword
user  userPassword

4) 在我的 MBean java 文件中添加了以下代码,并在 JMXoperation

中调用了方法 getUserName()
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 "";
}

当我 运行 它处于调试模式时,我看到调用 JMXOperation 的用户。