4

我已JMX在我的spring boot应用程序中启用。我可以在使用时设置/获取属性Jconsole。我想添加authentication(用户名/密码)以连接到MBeanServer. 如果可能的话,我更喜欢基于注释。

这是我的JMXBean

@ManagedResource(objectName = "Examples:type=JMX,name=Resource")
public class Resource {
    List<String> items = new ArrayList<>();

    @ManagedAttribute
    public String getLastItem() {
        return items.get(getSize()-1);
    }

    @ManagedAttribute
    public int getSize() {
        return items.size();
    }

    @ManagedOperation
    public void addItem(String item) {
        items.add(item);
    }

    @ManagedOperation
    public String getItem(int pos) {
        return items.get(pos);
    }

    @ManagedOperation
    public List<String> getItems() {
        return items;
    }


}

目前我没有任何XML配置。

我在我的配置中初始化了 bean

@Configuration
@EnableAutoConfiguration
@ComponentScan
public class Application extends SpringBootServletInitializer {

    public static void main(final String[] args) {
        SpringApplication.run(Application.class, args);
    }

    @Override
    protected final SpringApplicationBuilder configure(final SpringApplicationBuilder application) {
        return application.sources(Application.class);
    }

    @Bean
    public Resource jmxResource() {
        return new Resource();
    }
}
4

1 回答 1

3

要启用远程JMX 访问,您需要使用以下 JVM 参数启动 Spring Boot 应用程序:

-Dcom.sun.management.jmxremote.port=<port>

要配置基于文件的密码验证,请添加以下参数:

-Dcom.sun.management.jmxremote.password.file=<file>

有两个预定义用户:monitorRolecontrolRole。默认情况下,前者只有读权限,后者也可以写(参见 参考资料$JRE_HOME/lib/management/jmxremote.access)。使用jmxremote.password.templatein$JRE_HOME/lib/management作为密码文件的模板并坚持使用这些用户名。例如:

monitorRole <password>
controlRole <password>

使用这些用户名和您指定的密码登录。

请注意,使用此方法时,密码以明文形式存储,建议用于生产。请参阅有关如何使用 SSL 客户端证书或 LDAP 设置身份验证的文档。

于 2015-07-24T22:15:46.130 回答