如何在spring引导中为JMX设置身份验证凭据



我在spring boot应用程序中启用了JMX。我能够使用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();
    }
}

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

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

配置基于文件的密码认证,增加如下参数:

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

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

monitorRole <password>
controlRole <password>

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

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

相关内容

  • 没有找到相关文章

最新更新