# RMI - AccessControlException beim Naming.lookup()



## megachucky (23. Dez 2006)

Hallo.

Habe ein Programm, welches an der Uni einwandfrei läuft, nun starte ich es zu Hause und bekomme diesen Fehler:

Exception in thread "main" 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 ......<init>(......java:57)
	at ........main(.......java:17)

Deamon, Registry und Server starten. Der Fehler kommt dann beim Client, wenn dieser Naming.lookup() macht.

Muss ich da bei mir daheim evtl noch irgendwelche Ports freischalten, oder woran könnte das sonst liegen?

Danke für Hilfe.


----------



## L-ectron-X (23. Dez 2006)

Ist dein Port 1099 geöffnet? Wohin verbindet sich dein Client? Zu einem RMI-Server auf der gleichen Maschine oder eine andere im Netzwerk?


----------



## megachucky (23. Dez 2006)

Hallo. Alles auf einer Maschine.

Port 1099 geöffnet?! Hm, also ich benutze ihn zumindest nicht bewusst. Wie kann ich das denn nachschauen bzw dann ändern?


----------



## L-ectron-X (23. Dez 2006)

Wenn du auf deiner Maschine bleibst, brauchst du keinen Port öffnen.
Hast du einen SecurityManager gesetzt?
Welche Adresse hat dein Server und zu welcher Adresse verbindet sich dein Client?


----------



## Guest (23. Dez 2006)

Aufruf
	
	
	
	





```
java -Djava.security.policy=./client.policy  ...
```
Inhalt von client.policy
	
	
	
	





```
grant {
   // Anarchie
   permission java.security.AllPermission;
};
```


----------



## Guest (23. Dez 2006)

Noch was zur Erklärung. Gibst du keine Policy-Datei an, dann wird die
von JRE (siehe: %JAVA_HOME%\lib\security\java.policy) verwendet. 
Ändere diese aber nicht, es soll schon "dicht" sein.


----------



## megachucky (23. Dez 2006)

SecurityManager ist gesetzt. 

Als Adresse benutze ich einfach "localhost", wie gesagt, in der Uni hat genau dieser Code ja auch funktioniert. Daher wundert mich diese Fehlermeldung.


----------



## L-ectron-X (23. Dez 2006)

Kommentiere mal den SecurityManager aus. Der wird in der lokalen Umgebung u.U. nicht benötigt. Ansonsten musst du den Aufruf so gestalten, wie von Gast geschrieben.


----------



## megachucky (24. Dez 2006)

Also bei mir scheint es irgend ein anderes Problem zu geben.

Nun startet auch mein Server nicht mehr, und es kommt die Meldung der JVM: Could not find main class. --> NoClassDefFoundError

Habe über nacht aber überhaupt nix am Code verändert ?!? Diesen Fehler hier hatte ich vorgestern auch schon, dann habe ich Eclipse neu installiert und es ging wieder.

Das muss ja nun andere Gründen haben, als einen Fehler im Code?!?


----------



## megachucky (24. Dez 2006)

also das letzere problem hat sich nun erledigt. meine .class dateien waren gelöscht. 

@l-extron-x: nun geht es wirklich. danke.

aber gibts dafür auch eine erklärung? weil in der uni ging es genau so, auch alles auf einem rechner.


----------



## L-ectron-X (24. Dez 2006)

megachucky hat gesagt.:
			
		

> aber gibts dafür auch eine erklärung?


Wenn keine .class-Dateien da sind und ein NoClassDefFoundError geworfen wird, ist doch alles gesagt.
Oder meinst du die AccessControlException?
 ???:L Also wofür soll es nun eine Erklärung geben? Es geht doch jetzt...


----------



## Gast (28. Dez 2006)

-Djava.security.policy geht das auch zur runtime. will meine RMI umgebung in ein nettes jar packen das einfach nur verwendet werden muss ohne da jedesmal die VM befehle mitzugeben.
source ist unter http://code.google.com/p/bin-project/source via svn verfügbar.


----------



## L-ectron-X (28. Dez 2006)

Weiß ich nicht genau, würde mich auch interessieren. Es gibt in der Klasse System auch eine setProperty()-Methode, ich habe es aber noch nicht probiert. Wahrscheinlich gehts mit dieser Methode.
Ich habe das bisher mit einer Batchdatei oder einer mit JeStart erzeugten kleinen Starter-exe gemacht.


----------

