Java RMI - Доступ к объектам реестра RMI на другом компьютере - AccessControlException? - PullRequest
1 голос
/ 08 ноября 2011

Я пытаюсь заставить клиента на одном компьютере общаться с сервером на другом компьютере через Java RMI.Я развертываю сервер на хосте IP X через порт Y. Затем я пытаюсь заставить клиента выполнить поиск удаленного объекта на сервере, и я получаю следующее исключение:

Exception in thread "main" java.security.AccessControlException: access denied (java.net.SocketPermission <IP address>:<port> connect,resolve)
    at java.security.AccessControlContext.checkPermission(AccessControlContext.java:374)
    at java.security.AccessController.checkPermission(AccessController.java:546)
    at java.lang.SecurityManager.checkPermission(SecurityManager.java:532)
    at java.lang.SecurityManager.checkConnect(SecurityManager.java:1034)
    at java.net.Socket.connect(Socket.java:524)
    at java.net.Socket.connect(Socket.java:478)
    at java.net.Socket.<init>(Socket.java:375)
    at java.net.Socket.<init>(Socket.java:189)
    at sun.rmi.transport.proxy.RMIDirectSocketFactory.createSocket(RMIDirectSocketFactory.java:22)
    at sun.rmi.transport.proxy.RMIMasterSocketFactory.createSocket(RMIMasterSocketFactory.java:128)
    at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:595)
    at sun.rmi.transport.tcp.TCPChannel.createConnection(TCPChannel.java:198)
    at sun.rmi.transport.tcp.TCPChannel.newConnection(TCPChannel.java:184)
    at sun.rmi.server.UnicastRef.newCall(UnicastRef.java:322)
    at sun.rmi.registry.RegistryImpl_Stub.lookup(Unknown Source)
    at nursestation.NurseStation.subscribeToPatients(NurseStation.java:65)
    at nursestation.NurseStation.<init>(NurseStation.java:42)
    at nursestation.perf.SimplePerfTest.main(SimplePerfTest.java:28)

Обратите внимание, что и клиент, и серверработают с файлом политики, разрешающим все разрешения.Реестр RMI также работает на сервере.Есть идеи, почему я получаю это исключение?Что я могу сделать, чтобы позволить клиенту общаться с сервером, работающим на другом сервере?

Обновление:

Файл политики

grant {
  permission java.security.AllPermission;
};

Запуск клиента - Использование плагина RMIдля Eclipse

  1. Запустить реестр RMI
  2. Выполнено «java BedsideMonitorMain пациент1 vital1 vital2» с указанным файлом политики для java.security.policy, показанным выше, и java.rmi.server.codebaseуказывающий на код рабочей области моего проекта
  3. Объект Patient1 привязан к реестру RMI

Запуск сервера

  1. Выполнен «java NurseStationMain Patient1» с указаннымфайл политики для java.security.policy, показанный выше, и java.rmi.server.codebase, указывающий на код рабочей области моего проекта

1 Ответ

0 голосов
/ 12 ноября 2011

Итак, я выяснил основную проблему.По-видимому, обе машины имели разные лицензионные ключи для плагина Eclipse RMI, которые не позволяли обеим машинам взаимодействовать друг с другом.Когда я сделал лицензионный ключ на обеих машинах одинаковым, я смог заставить клиента и сервер взаимодействовать друг с другом.Для моих целей этого достаточно, так как я не использую эту систему в производственной среде (это для проекта класса).Мне любопытно, каким будет «лучшее» решение этой проблемы.

...