RMI соединение отказано
-
26-09-2019 - |
Вопрос
Я пытаюсь получить соединение RMI. Я столкнулся со многими вопросами безопасности, но не смог найти путь мимо всего этого. Я выполняю свой файл JAR с помощью:
java -Djava.security.policy=java.security.AllPermission -jar "myjarfile"
Код, который я использовал для создания этого:
public class server
{
public static void main(String args[])throws Exception
{
if (System.getSecurityManager() == null)
System.setSecurityManager ( new RMISecurityManager() {
public void checkConnect (String host, int port) {}
public void checkConnect (String host, int port, Object context) {}
});
try
{
sampleserverimpl server = new sampleserverimpl();
System.out.println("SERVER IS WAITING");
LocateRegistry.createRegistry(2020);
//Runtime.getRuntime().exec("rmiregistry 2020");
Naming.rebind("//localhost:2020/SERVER", server);
}
catch(Exception e)
{
System.out.println(e);
}
}
};
Ошибка прослеживания я получаю:
Exception in thread "RMI TCP Connection(idle)" java.security.AccessControlExcept
ion: access denied (java.net.SocketPermission 127.0.0.1:31199 accept,resolve)jav
a.rmi.UnmarshalException: Error unmarshaling return header; nested exception is:
java.io.EOFException
Я пробовал разные способы обойти это, может кто-нибудь увидеть эту проблему здесь?
Спасибо
Решение
-Djava.security.policy
Принимает URL, который указывает на файл политики, который, в свою очередь, содержит разрешения. Так что вы должны иметь: -Djava.security.policy=/some/path/my.policy
как аргумент JVM, где my.policy
Файл содержит:
grant {
permission java.security.AllPermission;
};
Также, чтобы избежать нулевой проверки, представленного в вашем коде и ручному созданию SecurityManager
, вы можете запросить автоматическое установку SecurityManager для вашего приложения, передавая переключатель JVM: -Djava.security.manager
.
Ваш последний вызов JVM должен выглядеть как:
java -Djava.security.manager -Djava.security.policy=/some/path/my.policy
Другие советы
Это два отдельных исключения. Первый - проблема с разрешениями. Второй, EOFException, может иметь любое количество причин. Мне бы нужно было увидеть Java -version и полный трассировку стека, чтобы помочь дальше.