Я пытаюсь создать сервер RMI, но я получаю следующее исключение во время выполнения:Java RMI/отказано в доступе
java.security.AccessControlException: access denied ("java.net.SocketPermission" "localhost:4555" "listen,resolve")
Я прочитал Oracle учебник о файлах политики, здесь содержание моего сервера. файл политики, который я вставил в папку Src:
grant codeBase "file:///C:/EclipseProjects/MultiServiceServer/src"{
permission java.security.AllPermission;
};
Я также установить параметры виртуальной машины для:
-Djava.security.policy=src/server.policy
Наконец, вот код этого простого сервера RMI:
public class Main {
public static void main(String[] args)
{
System.out.println("Server is running..");
if (System.getSecurityManager() == null) {
System.setSecurityManager(new SecurityManager());
}
try {
String name = "AvailableService";
AvailableService service = new ServiceList();
AvailableService stub = (AvailableService)UnicastRemoteObject.exportObject(service, 0);
LocateRegistry.createRegistry(4555);
Registry reg = LocateRegistry.getRegistry(4555);
reg.bind(name, stub);
System.out.println(name+" bound");
} catch(Exception e){e.printStackTrace();}
}
Спасибо за вашу помощь.
Если я не использую диспетчер безопасности, я получу другое исключение (без управления безопасностью: RMI classloader отключено), когда я пытаюсь работать с клиентской стороны на объект на стороне сервера. Я прочитал, что менеджер безопасности должен иметь возможность загружать классы через RMI. – freestar
В сообщении говорится «ClassNotFoundException», и в скобках упоминается «(нет менеджера безопасности)» в виде замечания. * Проблема * не является «никаким менеджером безопасности», это «ClassNotFoundException». Решение заключается не в том, чтобы добавить менеджера безопасности, а в том, чтобы добавить отсутствующий класс в путь класса JVM, который генерирует исключение. Менеджер безопасности требуется в соответствии с условиями, указанными мной, и другими. – EJP