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(); } } }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
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(); } } }
Et j'ai également ajouté la ligne "-Djava.security.policy=policyFile.policy" dans les arguments VM pour le Client et le Serveur.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 grant { permission java.security.AllPermission; };
Malgré tout ça, j'ai une exception levée lors de l'execution du Client (ras pour le Serveur):
Ai-je oublier de faire autre chose?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")
Merci.
Partager