RMI funktioniert nur wenn ich im selben Eclipse Projekt bin

  • Themenstarter Themenstarter Wastl
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
W

Wastl

Gast
Hallo Ihr,

habe folgendes Problem: Ich habe mir einen Testserver und einen TestClient geschrieben. Der Client soll über RMI entfernte Methoden aufrufen. Das funktioniert auch prima solange der Client und der Server im gleichen Eclipse Projekt sind. Wenn jedoch zwei unterschiedlche Projekte verwendet werden (alles auf einem Rechner) dann bekomme ich folgende Fehlermeldung:
Code:
java.security.AccessControlException: access denied (java.net.SocketPermission 127.0.0.1:1099 connect,resolve)
	at java.security.AccessControlContext.checkPermission(Unknown Source)
	at java.security.AccessController.checkPermission(Unknown Source)
	at java.lang.SecurityManager.checkPermission(Unknown Source)
	at java.lang.SecurityManager.checkConnect(Unknown Source)
	at java.net.Socket.connect(Unknown Source)
	at java.net.Socket.connect(Unknown Source)
	at java.net.Socket.<init>(Unknown Source)
	at java.net.Socket.<init>(Unknown Source)
	at sun.rmi.transport.proxy.RMIDirectSocketFactory.createSocket(Unknown Source)
	at sun.rmi.transport.proxy.RMIMasterSocketFactory.createSocket(Unknown Source)
	at sun.rmi.transport.tcp.TCPEndpoint.newSocket(Unknown Source)
	at sun.rmi.transport.tcp.TCPChannel.createConnection(Unknown Source)
	at sun.rmi.transport.tcp.TCPChannel.newConnection(Unknown Source)
	at sun.rmi.server.UnicastRef.newCall(Unknown Source)
	at sun.rmi.registry.RegistryImpl_Stub.lookup(Unknown Source)
	at java.rmi.Naming.lookup(Unknown Source)
	at Client.main(Client.java:14)

Ich habe schon ein wenig gesucht und bin auf das Stickwort Codebase gestossen. Aber soweit ich verstanden habe wird das nur benötigt wenn Client und Server nicht auf dem selben Dateisystem liegen.
 
java -Djava.security.policy=./etc/client.policy Client
java -Djava.security.policy=./etc/server.policy Server
Inhalt der policy-Datei(en) (hier alles erlaubt)
Code:
grant {
   // Alles erlaubt
   permission java.security.AllPermission;
};
Im Code dann auch noch einen SecurityManager verwenden. (noch vor dem JNDI bzw. Registry-Lookup)
Code:
System.setSecurityManager(new RMISecurityManager());
 
Hi

ich hab ein ähnliches Problem mit einem Applet und möchte das Ganze mal ausprobieren mit diesem SecurityManager. Das geht doch wohl auch mit Applets, oder!?
Ach und wo müssen diese policy Dateien hin? Wenn ich das richtig verstanden hab, braucht es im Paketeordner einen Unterordner namens /etc und da kommt alles rein, oder?!

thx
 
Das geht auch mit Applets. Du schreibst die Zeile für die Instanziierung des RMISecurityManagers am besten als erste Zeile in die init()-Methode. Aber du brauchst keine policy-Datei, die wird hier nur für den RMI-Server benötigt. Die nötigen Rechte für das Applet werden durch Signierung eingeräumt.
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben