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