如何限制对JMX属性的访问

时间:2015-03-18 00:48:46

标签: spring jmx mbeans spring-jmx mbeanexporter

我们的应用程序要求限制用户访问给定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>
&#13;
&#13;
&#13;

我希望在JMX控制台中只显示Hibernate MBean的clear方法。但是上面的配置暴露了所有原始的Hibernate MBean方法。

其次,默认情况下暴露C3P0 Mbean,我不需要Spring bean来暴露它。该MBean在控制台中显示为&#34; PooledDataSource [2spw3u98bqgqeg1697gnx | 73302995]&#34;。我不确定什么是暴露属性的一个子集的正确方法&amp;该MBean的操作。

您的帮助/指示表示赞赏。感谢。

1 个答案:

答案 0 :(得分:0)

如果bean是“真正的”MBean(实现<class>MBean),那么它将按原样导出。公开的属性/操作是该MBean的开发人员所期望的那些。

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

你可以编写自己的bean,代表hibernateStatisticsMBean只为你想要公开的方法。

根据你的描述,似乎C3PO在Spring之外注册了自己的MBean,所以如果没有深入研究他们的代码以查看是否有某种方法来禁用导出,并且再次使用委托MBean,那么你无法做任何事情。