如何限制对JMX属性的访问



我们的应用程序要求限制用户访问给定MBean的JMX属性和操作的子集。例如,C3P0 MBean暴露了许多属性/操作。假设我们不希望用户更改最小池大小。因此,我们希望在JMX控制台中抑制该属性的setter。

看着Spring文档,我认为这是可能的:http://docs.spring.io/spring/docs/current/spring-framework-reference/html/jmx.html

以下是我与Hibernate MBean的幽会:

    <bean id="hibernateStatisticsMBean" class="org.hibernate.jmx.StatisticsService">
	    <property name="statisticsEnabled" value="true" />
		<property name="sessionFactory" value="#{myEntityManagerFactory.sessionFactory}" />
	</bean>
	
	<bean id="mbeanServer" class="org.springframework.jmx.support.MBeanServerFactoryBean">
	    <property name="locateExistingServerIfPossible" value="true" />
	</bean>
	
	<bean id="jmxExporter" class="org.springframework.jmx.export.MBeanExporter" lazy-init="false">
	    <property name="server" ref="mbeanServer" />
	    <property name="beans">
	        <map>               
	            <entry key="Hibernate:name=hibernateStatistics" value-ref="hibernateStatisticsMBean" />
	        </map>
	    </property>
	    <property name="assembler">
	        <bean class="org.springframework.jmx.export.assembler.MethodNameBasedMBeanInfoAssembler">
	            <property name="managedMethods">
	             <list>
	                <value>clear</value>
	             </list>
	            </property>
	        </bean>
	    </property>
	</bean>

我希望在JMX控制台中只显示Hibernate MBean的clear方法。然而,上面的配置公开了所有原始的Hibernate MBean方法。

其次,C3P0 Mbean是默认公开的,我不需要Spring bean来公开它。那个Mbean在控制台中显示为"PooledDataSource[2spw3u98bqgqeg1697gnx|73302995]"。我不确定什么是只公开属性子集的正确方式&该MBean的操作。

感谢您的帮助/指点。谢谢

如果bean是"true"MBean(实现<class>MBean),则按原样导出。公开的属性/操作是该MBean的开发人员想要的。

MBeanInfoAssembler仅用于为bean构造ModelMBean,如果它根据JMX规范还不是MBean的话。

您可以编写自己的bean,将其委托给hibernateStatisticsMBean,只用于您想要公开的方法。

根据您的描述,C3PO似乎在Spring之外注册了自己的MBean,所以如果不深入研究他们的代码,看看是否有办法禁用导出,并再次使用委派MBean,您就无法在那里做任何事情。

相关内容

  • 没有找到相关文章