IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Sécurité Java Discussion :

Problème de connexion à un hôte distant avec Java RMI


Sujet :

Sécurité Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut Problème de connexion à un hôte distant avec Java RMI
    Bonjour à tous,

    J'ai un problème de connexion sur un hôte distant avec JAVA RMI. J'ai cherché de mon côté et j'ai vu qu'il fallait mettre en place un Gestionnaire de sécurité avec un fichier qui porte l'extension .policy, c'est ce que j'ai fait (d'après moi le problème vient du gestionnaire de sécurité).

    Je tiens quand même à préciser que mon code source fonctionne en local (le Serveur et le Client se trouvant sur la même machine). Par contre dés que je mets le Client sur une autre machine se trouvant (j'ai la neufbox de sfr) sur mon réseau local, j'ai un message d'erreur au niveau de la console ms-dos du client qui me dit (au passage les pare-feu sur les deux machines sont désactivés) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    java.rmi.ConnectException: Connection refused to host: 192.168.0.1
    java.rmi.ConnectException: Connection timed out
    Alors que je tente au niveau de mon code de me connecter au serveur qui a pour adresse ip : 192.168.1.80

    Voici le code de mes classes :

    Information.java :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    import java.rmi.*;
     
    public interface Information extends Remote {
       public String getInformation() throws RemoteException;
    }
    TestRMIServer.java :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    import java.rmi.*; 
    import java.rmi.server.*;
     
    public class TestRMIServer extends UnicastRemoteObject implements Information {
       public TestRMIServer() throws RemoteException {
          super();
       }
     
       public String getInformation()throws RemoteException {
          return "bonjour";
       }
    }
    Client.java :
    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
    import java.rmi.*;
    import java.rmi.server.*; 
    import java.util.*;
     
    public class Client{
    	public static void main(String[] args) {
    		System.out.println("Mise en place du Security Manager ...");
    		System.setProperty("java.security.policy", "./fic.policy");
    		System.setSecurityManager(new RMISecurityManager());
     
    		try {
    			  Remote r = Naming.lookup("rmi://192.168.1.80/TestRMI");
     
    			  if (r instanceof Information) {
    				 String s = ((Information) r).getInformation();
    				 System.out.println("chaine renvoyee = " + s);
    			  }
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    	}
    }
    Serveur.java :
    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
    import java.io.*;
    import java.rmi.*;
    import java.rmi.server.*; 
    import java.util.*;
     
    public class Serveur{
    	public static void main(String[] args) {
    	   try {
    			  System.out.println("Mise en place du Security Manager ...");
    		      System.setProperty("java.security.policy", "./fic.policy");
    			  System.setSecurityManager(new RMISecurityManager());
     
    			  TestRMIServer testRMIServer = new TestRMIServer();
    			  System.out.println("Enregistrement du serveur");
    			  Naming.rebind("TestRMI", testRMIServer);
    			  System.out.println("Serveur lance");	 
    	   } catch (Exception e) {
    		  System.out.println("Exception capturée: " + e.getMessage());
    	   }
    	}
    }
    fic.policy :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    grant {
       permission java.security.AllPermission;
    };
    Les commandes que je tape dans l'ordre respectivement sous ms-dos :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    REM inutile de faire un rmic -vcompat, la dernière jvm 
    REM le fait automatiquement à la compilation des classes
    cd \
    cd Hello*
    start rmiregistry
    javac Information.java TestRMIServer.java Serveur.java Client.java
    java Serveur
    java Client
    Si quelqu'un peut me dire s.v.p, pourquoi ce code ne fonctionne pas entre ces deux machines distantes ???

    Merci d'avance à tous pour vos réponses
    Fichiers attachés Fichiers attachés
    Dernière modification par Invité ; 29/12/2010 à 02h29.

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 52
    Par défaut
    Pour éviter de perdre du temps si ton code comporte une erreur, essai déjà de te connecter avec une appli comme la jconsole (dispo dans le jdk) sur ton hôte distant.
    Quand tu aura réussi tu pourra voir si ton code marche.

    Une piste : http://download.oracle.com/javase/1....ent/agent.html

    JMX utilise le RMI, donc si ça marche tu pourra écarter toutes les erreurs réseaux.

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 52
    Par défaut
    Sinon plus dans ce que tu cherches.
    Un super exemple : http://www.google.fr/url?sa=t&source...DUu0t3cnu9ny_A

  4. #4
    Invité
    Invité(e)
    Par défaut
    Ok, merci, je vais suivre ta piste et je te tiens au courant demain de la suite des événements. Je t'informerai si je suis arrivé ou non à régler mon problème.

  5. #5
    Invité
    Invité(e)
    Par défaut
    * C'est bon, ça fonctionne, c'est mon routeur sagem nb4 (je suis chez sfr, anciennement neuf telecom), fallait accéder à l'interface du routeur modem sagem en tapant dans son navigateur la passerelle par défaut : 192.168.1.1
    et ensuite ouvrir le port par défaut utilisé par le framework java rmi (quand on stipule pas de port au niveau du code java) 1099. Faut ouvrir ce port en TCP et en UDP et comme adresse de redirection, il faut rediriger vers l'adresse du serveur qui met en ligne le service (l'objet distant à appeler) 192.168.1.24.

    * Dans mon cas le programme qui jouait le rôle du serveur avait cette adresse ip :

    192.168.1.24

    * Dans mon cas le programme qui jouait le rôle du client avait cette adresse ip :

    192.168.1.80

    * Inutile aussi de générer stub et skeleton, ces derniers sont automatiquement générés lors de la compilation par la jvm qui gère ça elle même, depuis la version 2 de java (de souvenir) :

    rmic -vcompat nomClassImplInterface

    * Inutile aussi de mettre en place côté client et serveur un gestionnaire de sécurité dans le code java ou un fichier avec l'extension .policy.

    * Il faut par contre absolument lancer (côté serveur) le rmiregistry soit en faisant sous windows start rmiregistry ou sous linux rmiregistry &
    ou dans une classe java directement à travers le code java un

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    java.rmi.registry.LocateRegistry.createRegistry(1099);
    J'ai stagné une semaine sur ce problème, j'espère que ces précieux conseils aideront les débutants bloqués avec java rmi, à gagner du temps.

    Problème résolu.
    Dernière modification par Invité ; 04/01/2011 à 02h16.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 16
    Dernier message: 05/06/2008, 11h32
  2. [serveur 2003] Problème d'appel de machine distante avec delprof
    Par boss_gama dans le forum Windows Serveur
    Réponses: 7
    Dernier message: 07/02/2007, 17h14
  3. [débutant] Connexion à un SGBD distant avec ODBC
    Par Thor Tillas dans le forum Access
    Réponses: 4
    Dernier message: 11/01/2007, 08h31
  4. [MySQL] Problème de connexion à une BDD distante
    Par maxopoulos dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 19/04/2006, 10h56
  5. Connexion sur site distant avec un client écrit en PERL ??
    Par Cygnus Saint dans le forum Modules
    Réponses: 2
    Dernier message: 07/03/2006, 10h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo