Мне нужен реестр RMI, который делает службу доступной извне моей машины, и в то же время я могу отклонить соединение на основе IP-адреса клиента. Следующий код делает реестр доступным только с моей машины, но никогда не попадает в код «RMIClientSocketFactory»:
LocateRegistry.createRegistry(uri.getPort(), new RMIClientSocketFactory() {
@Override
public Socket createSocket(String host, int port) throws IOException {
System.out.println("RMIServerSocketFactory().createSocket()");
InetAddress addr = InetAddress.getByName(host);
if (addr.equals(InetAddress.getLocalHost())) {
return new Socket(addr, port);
} else {
throw new IOException("remote socket bind forbidden.");
}
}
}, new RMIServerSocketFactory() {
@Override
public ServerSocket createServerSocket(int port) throws IOException {
System.out.println("RMIServerSocketFactory().createServerSocket()");
return new ServerSocket(port, 0, InetAddress.getByName("127.0.0.1"));
}
});
Таким образом, он запускает «RMIServerSocketFactory» и связывается с обратной связью, но никогда не проверяет IP-адрес клиента.
Любая помощь приветствуется, большое спасибо!