Вопрос

Я пытаюсь получить соединение 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 и полный трассировку стека, чтобы помочь дальше.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top