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