2010-11-18 7 views
3

Ich versuche, eine RMI-Verbindung zu erhalten. Ich bin auf viele Sicherheitsprobleme gestoßen, aber ich habe keinen Weg gefunden, an all dem vorbeizukommen. Ich ausführen meine jar-Datei mit:RMI-Verbindung verweigert

java -Djava.security.policy=java.security.AllPermission -jar "myjarfile" 

Der Code, den ich dies zu schaffen wurden verwendet, ist:

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); 
    } 
} 
}; 

Die Fehler Spur Ich erhalte ist:

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 

Ich habe versucht, verschiedene Möglichkeiten, um dies zu umgehen, kann hier jemand das Problem sehen?

Danke

Antwort

6

-Djava.security.policy akzeptiert eine URL, die auf eine Richtliniendatei verweist, die wiederum die Berechtigungen enthält. Also sollten Sie haben: -Djava.security.policy=/some/path/my.policy als JVM-Argument in dem die my.policy Datei enthält:

grant { 
    permission java.security.AllPermission; 
}; 

Auch, um den NULL-Check in Ihrem Code und die manuelle Erstellung eines SecurityManager zu vermeiden, können Sie ein Sicherheitsmanager anfordern sein automatisch für Ihre Anwendung installiert, indem Sie den JVM-Switch übergeben: -Djava.security.manager.

Ihre letzte JVM Aufruf aussehen sollte:

java -Djava.security.manager -Djava.security.policy=/some/path/my.policy 
+0

Habe es jetzt gelaufen, danke. Die Datei wurde früher versucht, aber nicht zum Sicherheitsmanager hinzugefügt. +1 – chrissygormley

0

Dies sind zwei separate Ausnahmen. Das erste ist ein Berechtigungsproblem. Die zweite, die EOFE-Ausnahme, könnte verschiedene Ursachen haben. Ich müsste Java-Version und die komplette Stack-Trace sehen, um weiter zu helfen.

+0

ich etwas das gleiche Problem haben, meine Anwendung, die RMI verwendet läuft in eine EOFException und Abstürze, aber wenn ich die Berechtigungen AllPermissions gesetzt alle läuft gut. Irgendeine Idee, welche Erlaubnis das verursachen kann? – Oli