Java JMX 获取登录用户

标签 java spring security jmx

我有一个由 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/

相关文章:

java - 如何编写自定义 CrudRepository 方法(@Query)来过滤我的结果

spring - 如何在 Websphere ND 8.5 中运行 Spring Batch 管理

python - 更改 Django 管理员不活动超时

c# - 我的 .net 应用程序在本地计算机上运行,​​但在从网络位置使用时失败

java - 无法解决 DataAccessException。它是从所需的 .class 文件中间接引用的

java - 如何使用多个同步线程对数组进行排序?

java - HttpClient 和连接超时

java - 有没有办法让我的地址栏的 JTextField 更大更 flex

java - FtpRemoteFileTemplate 检查远程文件是否存在但无法检索它

.net - .NET 中的图像上传验证