Bonjour,

Je débute avec RMI sous Eclipse et je souhaite mettre en place un gestionnaire de sécurité a mon client et mon serveur.
Après avoir consulté le tutoriel de JM Doudoux, j'ai reussi a mettre en place ceci (qui fonctionne parfaitement sans les lignes relatives au Security Manager):

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
 
import java.rmi.RMISecurityManager;
import java.rmi.registry.Registry;
import java.rmi.registry.LocateRegistry;
 
public class Server {
 
	public Server() {}
 
	public static void main(String args[]) {
 
		try {
 
		    if (System.getSecurityManager() == null) {
		        System.setSecurityManager(new RMISecurityManager());
		      }
 
			Animal obj = new Animal("Voyou", "Yoyo", "Chien", "Caniche");
			Registry registry = LocateRegistry.createRegistry(1099);
			if (registry==null){
				System.err.println("RmiRegistry not found");
			} else{
				registry.bind("IAnimal", obj);
				System.err.println("Server ready");
			}
		} catch (Exception e) {
			System.err.println("Server exception: " + e.toString());
			e.printStackTrace();
		}
	}
}
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
 
import java.rmi.RMISecurityManager;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
 
public class Client {
 
	private Client() {}
 
	public static void main(String[] args) {
 
		String host = (args.length < 1) ? null : args[0];
		// gestionnaire de sécurité
	    if (System.getSecurityManager() == null) {
	        System.setSecurityManager(new RMISecurityManager());
	    }
 
		try {
			Registry registry = LocateRegistry.getRegistry(host);
			IAnimal stub = (IAnimal) registry.lookup("IAnimal");
			stub.afficheAnimal();
		} catch (Exception e) {
			System.err.println("Client exception: " + e.toString());
			e.printStackTrace();
		}
	}
}
J'ai aussi crée un fichier policyFile.policy dans le dossier ou se trouvent mes classes.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
grant {
permission java.security.AllPermission;
};
Et j'ai également ajouté la ligne "-Djava.security.policy=policyFile.policy" dans les arguments VM pour le Client et le Serveur.

Malgré tout ça, j'ai une exception levée lors de l'execution du Client (ras pour le Serveur):

Client exception: java.security.AccessControlException: access denied ("java.net.SocketPermission" "127.0.0.1:1099" "connect,resolve")
java.security.AccessControlException: access denied ("java.net.SocketPermission" "127.0.0.1:1099" "connect,resolve")
Ai-je oublier de faire autre chose?

Merci.