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

时间:2015-07-28 18:12:37

标签: java authentication jmx

我正在尝试获取调用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 "";
}

1 个答案:

答案 0 :(得分:0)

上面的代码确实有效。 我做了什么(对于所有可能像我一样的想法):

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的用户。