我有一台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)和本地主机创建JMXServiceURL。我曾尝试将其显式地指定为"127.0.0.1“作为绑定的地址,但也不起作用。
Java的JMX服务器绑定到所有IP地址,并且只拒绝绑定到127.0.0.1。
发布于 2010-02-22 09:55:07
运行以下代码:
public static void main(String args[]) {
try {
InetAddress local = InetAddress.getLocalHost();
System.out.println("Host address: " + local.getHostAddress());
System.out.println("Host name: " + local.getHostName());
System.out.println("Canonical host name: " + local.getCanonicalHostName());
System.out.println("Address: " + local.getAddress());
} catch (UnknownHostException e) {
e.printStackTrace();
}
}如果将null作为主机参数传递,该类将使用InetAddress.getLocalHost().getHostName()。至少对我来说,它不会返回"127.0.0.1",它使用的是我的机器的名称,根据描述,这似乎是错误的(这不是我的回送地址)。该地址可供其他机器使用。当你尝试的时候会发生什么:
JMXServiceURL jmxUrl = new JMXServiceURL("http","127.0.0.1",JMX_PORT);或者:
JMXServiceURL jmxUrl = new JMXServiceURL(null,"127.0.0.1",JMX_PORT);如果未提供,协议默认为"jmxmp“。
https://stackoverflow.com/questions/2308344
复制相似问题