# Java Policy - java.io.FilePermission



## merlinonline (9. Juni 2008)

Hi,
ich muss sagen, irgendwie verstehe ich Java nicht mehr ganz, oder ich bin einfach zu ah, auf jedenfall kriege ich das gerade total nicht hin die passende Policy zu setzen. Aber erstmal von vorne an.

Ich habe ein RMI -System aus Server und Client. Der Server soll die Klassen automatisch über RMI nachladen, was ja auch geht. Dafür braucht der Server wohl aber irgendwie das Recht, dass er die Klasse auch einlesen kann. Oki, also eine extra Policy geschrieben, die ich auch mit absoluten Pfaden einwandfrei funktioniert. Nur weiß ich absolut nicht, wie ich da relative Pfade hinbekomme

Der Server hat die Quelldateien halt im ./bin - Ordner.

Die policy-Datei:

```
grant
{
  permission java.net.SocketPermission "*:1024-", "connect,accept";
	//  permission java.io.FilePermission "\\\\E\\Studium Arne\\Projekte\\DatenbankSystem\\Server\\-", "read";
   permission java.io.FilePermission "\\\\${user.dir}${/}-", "read";
 
  permission java.util.PropertyPermission "user.dir", "read";
  permission java.io.SerializablePermission "enableSubclassImplementation";
   
    //um aktuelle Rechte auslesen zu können, später löschen
   permission java.lang.RuntimePermission "getProtectionDomain";
   permission java.security.SecurityPermission "getPolicy";
};
```

Also die jetzt auskommentierte Permission, mit der geht alles wunderbar.

Aus der zweiten FilePermisson kriege ich dann halt als Ergebnis in dem Rechten:
 (java.io.FilePermission \\E:\Studium Arne\Projekte\DatenbankSystem\Server\- read)

was ja eigentlich gar nicht mal so falsch ist, nur er mekkert immer:


```
Exception in thread "main" java.lang.ExceptionInInitializerError
	at serverSettings.ServerStart.main(ServerStart.java:13)
Caused by: java.security.AccessControlException: access denied (java.io.FilePermission \\E\Studium Arne\Projekte\DatenbankSystem\Server\bin read)
	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.checkRead(Unknown Source)
	at java.io.File.exists(Unknown Source)
	at sun.net.www.protocol.file.Handler.openConnection(Unknown Source)
	at sun.net.www.protocol.file.Handler.openConnection(Unknown Source)
	at java.net.URL.openConnection(Unknown Source)
	at sun.rmi.server.LoaderHandler.addPermissionsForURLs(Unknown Source)
	at sun.rmi.server.LoaderHandler.getLoaderAccessControlContext(Unknown Source)
	at sun.rmi.server.LoaderHandler.lookupLoader(Unknown Source)
	at sun.rmi.server.LoaderHandler.loadProxyClass(Unknown Source)
	at java.rmi.server.RMIClassLoader$2.loadProxyClass(Unknown Source)
	at java.rmi.server.RMIClassLoader.loadProxyClass(Unknown Source)
	at sun.rmi.server.MarshalInputStream.resolveProxyClass(Unknown Source)
	at java.io.ObjectInputStream.readProxyDesc(Unknown Source)
	at java.io.ObjectInputStream.readClassDesc(Unknown Source)
	at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
	at java.io.ObjectInputStream.readObject0(Unknown Source)
	at java.io.ObjectInputStream.readObject(Unknown Source)
	at sun.rmi.registry.RegistryImpl_Skel.dispatch(Unknown Source)
	at sun.rmi.server.UnicastServerRef.oldDispatch(Unknown Source)
	at sun.rmi.server.UnicastServerRef.dispatch(Unknown Source)
	at sun.rmi.transport.Transport$1.run(Unknown Source)
	at java.security.AccessController.doPrivileged(Native Method)
	at sun.rmi.transport.Transport.serviceCall(Unknown Source)
	at sun.rmi.transport.tcp.TCPTransport.handleMessages(Unknown Source)
	at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(Unknown Source)
	at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(Unknown Source)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
	at java.lang.Thread.run(Unknown Source)
	at sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(Unknown Source)
	at sun.rmi.transport.StreamRemoteCall.executeCall(Unknown Source)
	at sun.rmi.server.UnicastRef.invoke(Unknown Source)
	at sun.rmi.registry.RegistryImpl_Stub.bind(Unknown Source)
	at java.rmi.Naming.bind(Unknown Source)
	at connectionHandler.SQLConnectionHandler.<clinit>(SQLConnectionHandler.java:94)
	... 1 more
```


Für jeden Hinweis bin ich dankbar, denn irgendwie kriege ich es total nicht hin.

DANKE


----------

