这比起初看起来更棘手.需要的是限制注册表正在侦听的IP 地址,而不是端口.问题是RMI注册表实现程序(rmiregistry)实际上没有提供任何机制来限制它侦听的IP地址; 它始终监听每个可用的网络接口.限制这种情况只有两种实用机制:
localhost,127.0.0.1),因为Windows 不抱怨,只能从本地机器达到插座.第二个选项是我要草拟的.这实际上非常简单,因为您可以将大部分复杂性委托给现有类.
import java.io.IOException;
import java.net.*;
import java.rmi.server.*;
import java.rmi.registry.LocateRegistry;
public class RestrictedRMIRegistry implements RMIServerSocketFactory {
public static void main(String... args) throws IOException {
int port = (args.length == 0 ? 1099 : Integer.parseInt(args[0], 10));
RMIClientSocketFactory csf = RMISocketFactory.getDefaultSocketFactory();
RMIServerSocketFactory ssf = new RestrictedRMIRegistry();
LocateRegistry.createRegistry(port, csf, ssf);
}
public ServerSocket createServerSocket(int port) throws IOException {
// Tricky bit; make a server socket with bound address
return new ServerSocket(port, 0, InetAddress.getLocalHost());
}
}
Run Code Online (Sandbox Code Playgroud)
这和正常之间的唯一区别rmiregistry实现是一个使用默认值都在客户端和服务器套接字工厂.
| 归档时间: |
|
| 查看次数: |
7447 次 |
| 最近记录: |