我有一个由 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但它似乎是特定于 glassfish 的,我正在寻找基于普通 Java 的解决方案。
非常感谢,祝你有愉快的一天
最佳答案
这应该可行,但只有在用户通过身份验证后才会填写主题。本地 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 "";
}
关于Java JMX 获取登录用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12929335/