gpt4 book ai didi

java - JMX 客户端 session

转载 作者:行者123 更新时间:2023-12-01 05:50:41 25 4
gpt4 key购买 nike

我研究 JMX 一段时间了,但我陷入困境。

我有一个通过 JMX 向远程客户端公开某些功能的应用程序,尽管现有的安全功能可能足以满足大多数情况,我的应用程序使用 Apache Shiro 框架作为安全后端。

我的问题是我不知道如何在服务器端收集客户端数据。 Shiro 需要一种方法来识别客户端(主题),通常执行线程与主题相关联,但在线 JMX 文档没有提供有关远程 JMX 线程模型的太多线索。

我如何将客户端与线程关联起来,或者有没有办法在交互的 MBean 内检索客户端数据?

最佳答案

在研究并尝试不同的技术之后;有两名获奖者:

1- 名为 ClientContext 的新功能将成为 Java 7 的一部分:Java 7 尚未完成,ClientContext 将破坏向后兼容性。

2- 将 Shiro 主题附加到 AccessControlContext:这是我选择的解决方案,Shiro 的默认主题检索机制不考虑 Java 的访问控制上下文。我很久以前就进行了测试来测试这一点,但它不起作用。现在我知道为什么了:默认情况下,SecurityUtils.getSubject() 调用将检索到的主题附加到当前调用的线程,但这种方法是无用的,因为线程可以在客户端之间共享。但是 AccessControlContext 更强大,并且看起来 JMX 与它配合得很好;您的访问控制上下文(在 JMXAuthenticator 登录期间进行身份验证)可以从 MBeanServerForwarder 甚至您的 MBean 内部进行访问。我用多个客户端检索他们的本金对此进行了测试,它很有效。

编辑:我如何将 Shiro 主题附加到当前 AccessControlContext?

1- 使用构建器类Subject.Builder 创建一个独立的 Shiro 主题。

2-验证用户身份(使用Shiro主体的登录方法等)

3- 使用包含 Shiro 主题作为私有(private)凭据的单例集创建可变 JAAS 主题。

4- 向底层 Java 安全系统提供 JAAS 主题(例如,在 JMXAuthenticator 的身份验证方法中返回主题)

可以创建一个辅助类来简化这种方法。当您需要代表 Shiro 主题执行操作(用于授权等)时,请从 AccessControlContext 获取它并使用 Subject.execute... 方法之一。这可以在代理或转发器(如 MBeanServerForwarder)内执行。

关于java - JMX 客户端 session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4785020/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com