【发布时间】:2012-09-26 00:29:01
【问题描述】:
我有一个 java 服务器。我希望能够使用 JMX 客户端连接到它。 我这样做:
JMXServiceURL jmxUrl = new JMXServiceURL(null,null,JMX_PORT);
JMXConnectorServer jmxRemoteServer;
jmxRemoteServer=JMXConnectorServerFactory.newJMXConnectorServer(jmxUrl, jmxEnvironment, server);
jmxRemoteServer.start();
这行得通。我可以启动 JConsole 并连接到我机器上的 JMX_PORT 并显示漂亮的图表。
有问题。这会导致 JMX 服务器绑定到所有接口上的 JMX_PORT。我只想让它绑定到 127.0.0.1。否则,这对我来说是一个安全问题。
根据文档,JMXServiceURL jmxUrl = new JMXServiceURL(null,null,config.getJmxRemotePort()); 应该使用默认协议 (jmxmp) 和 localhost 创建一个 JMXServiceURL。我试过明确地给它“127.0.0.1”作为绑定地址,但它也不起作用。
Java 的 JMX 服务器绑定到所有 IP 地址,并且拒绝只绑定到 127.0.0.1。
【问题讨论】:
-
只是为了让大家知道,我的所有研究都让我相信不可能将 JMX 绑定到一个特定的 IP 地址。它绑定到他们所有人。
-
似乎 -Djmx.remote.server.address.wildcard=false 可能会强制它绑定到一个 IP 地址:blog.markfeeney.com/2010/10/jmx-through-ssh-tunnel.html
-
如果您使用 RMI 作为您的协议,请参考此 URL:dev.303.se/development/95/limiting-rmi-to-127-0-0-1
-
这不是正确的答案。 -Djmx.remote.server.address.wildcard=false 使 JMX 只绑定到它给定的地址。
-
这是 JVM 的哪个版本,在哪个平台上?这在未来可能会非常有用。