RMI соединение отказано - PullRequest
3 голосов
/ 18 ноября 2010

Я пытаюсь установить соединение 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

Я пробовал разные способы обойти это, кто-нибудь может увидеть проблему здесь?

Спасибо

Ответы [ 2 ]

6 голосов
/ 18 ноября 2010

-Djava.security.policy принимает URL, который указывает на файл политики, который, в свою очередь, содержит разрешения.Поэтому вы должны иметь: -Djava.security.policy=/some/path/my.policy в качестве аргумента JVM, где файл my.policy содержит:

grant {
  permission java.security.AllPermission;
};

Кроме того, чтобы избежать проверки NULL в вашем коде и ручного создания SecurityManager, вы можете запросить автоматическую установку SecurityManager для вашего приложения, передав переключатель JVM: -Djava.security.manager.

Ваш окончательный вызов JVM должен выглядеть следующим образом:

java -Djava.security.manager -Djava.security.policy=/some/path/my.policy
0 голосов
/ 18 ноября 2010

Это два отдельных исключения. Первая проблема с разрешением. Вторая, EOFException, может иметь несколько причин. Мне нужно увидеть java-версию и полную трассировку стека, чтобы помочь в дальнейшем.

...