我有一个由JVM进程启动的JMX服务器,可以选择性地保护(现在它不是,所以我准备考虑任何可扩展的方式)。例如,作为一个选项,我查看了official tutorial,现在可以使用用户/密码验证。 MBean通过spring部署(使用了注释方法)。
现在我想从我的MBean 中获取一些其他操作的用户名。是否有可能在JMX技术中完成?如果是的如何? :)
示例:
public class MyMBean {
public void myOp() {
String userName = ... ?; // or whatever object that can bring me the name
makeSomethingWithUserName ( userName );
doMyStuffHere();
}
}
我发现this tutorial但它似乎是特定于玻璃鱼的,我正在寻找基于简单java的解决方案。
非常感谢,祝你有个愉快的一天
答案 0 :(得分: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 "";
}