Newsgroup: it.comp.java
Titolo: RMI: Access denied su lato client.

Dunque, il mio problema è questo: ho realizzato un'applicazione
client-server che sfrutta RMI. Il server funziona che è un gioiellino, si
registra e fa tutte le sue cosine a modo. Il client è un'applet e qui
vengono i dolori. Ho creato una pagina html per richiamare l'applet. Il
tutto funziona correttamente finchè uso l'appletviewer. Se cerco di usare un
browser con la java plugin ottengo il seguente errore:
java.security.AccessControlException: access denied
(java.net.SocketPermission 
141.165.141.10:2001
 connect,resolve)
 at
java.security.AccessControlContext.checkPermission(AccessControlContext.java
:272)
 at
java.security.AccessController.checkPermission(AccessController.java:399)
 at java.lang.SecurityManager.checkPermission(SecurityManager.java:545)
 at java.lang.SecurityManager.checkConnect(SecurityManager.java:1044)
 at
sun.rmi.transport.proxy.RMIMasterSocketFactory$AsyncConnector.<init>(RMIMast
erSocketFactory.java:356)
 at
sun.rmi.transport.proxy.RMIMasterSocketFactory.createSocket(RMIMasterSocketF
actory.java:145)
 at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:499)
 at sun.rmi.transport.tcp.TCPChannel.createConnection(TCPChannel.java:190)
 at sun.rmi.transport.tcp.TCPChannel.newConnection(TCPChannel.java:174)
 at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:83)
 at WebShop.Server.WebShopServerImpl_Stub.getMarket(Unknown Source)
 at WebShop.Client.WebShopClient.init(WebShopClient.java:796)
 at sun.applet.AppletPanel.run(AppletPanel.java:344)
 at java.lang.Thread.run(Thread.java:484)
é da notare che a questo punto del codice l'oggetto server è già stato
correttamente localizzato e si è ottenuto un puntatore valido allo stesso.
L'errore si scatena alla prima invocazione di un qualunque metodo del server
( e infatti viene generato nello stub). Dopo affannose ricerche credo di
aver capito che si tratta di un problemi di permessi di accesso che molto
probabilmente si risolve con un file di policy. Il problema è che non so
come fare capire al plugin che deve caricare un determinato file di policy
(ammesso poi che il problema sia poi effettivamente legato a questo).
Note aggiuntive: client e server girano sulla stessa macchina. L'indirizzo
ip che si vede nell'errore è quello della macchina su cui girano. Sia il
server che il client, però, nel codice non fanno mai riferimento a quell'ip
ma ha localhost. La pagina HTML e i file jar contenenti le classi si trovano
sotto una directory virtuale di IIS. Con l'applettviewer accedo
correttamente a questa pagina e riesco a lanciare l'applet senza problemi.
Qualcuno mi sa dire cosa diavolo devo fare per far funzionare l'applet anche
dai browser??
Grazie a tutti per l'aiuto. Un povero disperato, Rick.


Strano, dovrei vedere il codice.
Comunque usa il policytool per modificare il file di policy, il plug-in legge quello.
Per quanto riguarda RMI, se prevedi l'uso dell'applet su internet stai percorrendo una
strada pericolosa, costellata da firewalle e proxy che gradiranno poco il protocollo :-)
Se invece lo us in Intranet, e hai piu' o meno sotto controllo la rete, allora tutto okay
Ciao,
    Bruno.
|
| Bruno Bossola
| A Java Software Engineer :-)
| 
http://bbruno.fasturl.it
|
| 
http://members.xoom.it/bbruno
| 
http://digilander.iol.it/bbossola
|

 Comunque usa il policytool per modificare il file di policy, il plug-in
legge quello.
Il problema è capire qual'è il file di policy. Ho fatto una ricerca sul mio
pc e ho modificato
tutti i file *.policy esistenti ma senza risultato. Ce n'è percaso qualcun
altro che si chiama in modo diverso?
Inoltre il ho scoperto che ci potrebbe essere un file .java.policy nella mia
directory home. Il problema che tale
file non c'è e non riesco a crearlo. Esiste però una directory .java. Devo
creare un file .policy sotto quella directory?
Grazie mille, Rick.


Comunque ricordati di utilizzare il policytool: le modifiche a mano sono complesse, te le
sconsiglio.
