Java JMX客户端会话

Java JMX客户端会话,java,jmx,mbeans,shiro,Java,Jmx,Mbeans,Shiro,我学习JMX已经有一段时间了,但我被卡住了 我有一个应用程序,它通过JMX向远程客户端公开了一些功能,尽管现有的安全特性对于大多数情况可能已经足够了,但我的应用程序使用ApacheShiro框架作为安全后端 我的问题是我不知道如何在服务器端收集客户端数据。Shiro需要一种识别客户机(主题)的方法,通常执行的线程与主题相关联,但在线JMX文档并没有提供关于远程JMX的线程模型的很多线索 如何将客户机与线程关联,或者是否有方法在交互的MBean中检索客户机数据 在研究和尝试不同的技术之后;有两位获

我学习JMX已经有一段时间了,但我被卡住了

我有一个应用程序,它通过JMX向远程客户端公开了一些功能,尽管现有的安全特性对于大多数情况可能已经足够了,但我的应用程序使用ApacheShiro框架作为安全后端

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


如何将客户机与线程关联,或者是否有方法在交互的MBean中检索客户机数据

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

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

2——将Shiro对象附加到Access控件上下文:这是我选择的解决方案,Shiro的默认主题检索机制不考虑java的访问控制上下文。很久以前我做了一个测试来测试这个,但是没有成功。现在我知道了原因:默认情况下,SecurityUtils.getSubject()调用将检索到的主题附加到当前调用的线程,但是这种方法没有用,因为线程可以在客户端之间共享。但是AccessControlContext更强大,而且看起来JMX可以很好地使用它;您的访问控制上下文(在登录JMXAuthenticator时经过身份验证)可以从MBeanServerForwarder甚至在MBean内部进行访问。我用多个客户机检索他们的委托人进行了测试,结果很简单

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

1-使用生成器类subject.builder创建未附加的Shiro主题

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

3-创建一个可变JAAS主题,其中包含Shiro主题作为私有凭据的单例集

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


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

@Farrukh Najmi添加了关于如何执行的详细说明