LocateRegistry.createRegistry - PullRequest
       6

LocateRegistry.createRegistry

2 голосов
/ 10 марта 2011

Мне нужен реестр 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-адрес клиента. Любая помощь приветствуется, большое спасибо!

1 Ответ

2 голосов
/ 10 марта 2011

Фабрика клиентских сокетов - это не то, что вам нужно.

Что вам нужно, это ServerSocket для отклонения соединений от нежелательных IP-адресов.Самый простой способ добиться этого - создать подкласс ServerSocket, который переопределяет метод accept(), чтобы немедленно закрывать соединения с нежелательных IP-адресов и выдавать исключение.

Однако существуют более эффективные низкоуровневые способы управлениядоступ к сети, я не думаю, что ваше приложение, дублирующее роль брандмауэра (что, по сути, вам нужно), является особенно хорошей идеей.

...