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

Entrée/Sortie Java Discussion :

RMI via Internet


Sujet :

Entrée/Sortie Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    74
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 74
    Par défaut RMI via Internet
    Bonjour,

    Je developpe une appli client/serveur avec des RMI et je rencontre un problème lorsque j'essaye de faire des test.

    - En réseau local, pas de problème, l'appli tourne bien
    - Via internet, le client rencontre une erreur:
    java.rmi.ConnectException: Connection refused to host xxx.xxx.xxx.xxx;

    J'ai essayé de rajouter un fichier de politique de sécurité côté client et côté serveur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.setProperty("java.security.policy","Server.policy");
    avec dans le fichier policy:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    grant{
    permission java.security.AllPermission;
    };
    Par contre, je n'arrive pas à savoir si java prend en compte ce fichier, vu que si je fais une erreur dans le nom de fichier, il ne leve pas d'exception.

    Pour info, j'ai redirigé le port d'écoute vers le serveur, donc l'erreur ne viens pas de là.
    Au cas où, je vous met le code RMI côté client et serveur:

    Serveur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Registry registry;
    //On crée le registry sur le port 18500
    registry = LocateRegistry.createRegistry(18500);
    welcomeMessage();
    Plateau stub;
    PlateauImpl service = new PlateauImpl();
    stub = (Plateau) UnicastRemoteObject.exportObject(service,0);
    registry.rebind("Plateau", stub);
    Client:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Registry registry = LocateRegistry.getRegistry("xxx.xxx.xxx.xxx",18500);
    this.plateau = (Plateau)registry.lookup("Plateau");
    Voila, merci à ceux qui pourront m'aider

  2. #2
    Membre chevronné Avatar de djsnipe
    Inscrit en
    Mai 2008
    Messages
    440
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 440
    Par défaut
    Question toute bête, mais depuis la machine hébergeant le client, as-tu vérifié l'accès réseau vers le serveur par un bon vieux "telnet ip port" ?

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    74
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 74
    Par défaut
    Question bête mais tellement efficace...
    Non je n'avais pas essayé parce que ça fait une semaine que j'avais demandé à l'admin de me permettre d'accéder au serveur sur ce port...

    Naïf que je suis, et fainéant d'informaticien (oui j'en suis un, mais je reconnais être fainéant).

    En tous cas merci de ton aide, j'étais en train de me prendre la tête pour rien.

    Sujet clos.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 15
    Par défaut
    Bonjour,
    Le fait que t'as changé le nom du fichier et il a rien dit, alors là, tu as oublié de mettre le : System.setSecurityManager(new RMISecurityManager()); dans le code du client.
    J'avais eu le même problème que toi mais voilà je te présente ma version de solution.

    coté client :
    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
     
    public static boolean connect(String profil, String login, String mdp){
    		IAnnuaire rmiStub = null;
    		boolean reponse   = false;
    		try {
    			// Rmi policy
    			System.setProperty("java.security.policy", 
    					"D:/Mes Documents/Eclipse Project/Annuaire/src/com/annuaire/rmi/security.policy");
    			// Rmi Security Manager
    			System.setSecurityManager(new RMISecurityManager());
    			// Charger l'objet
    			rmiStub = (IAnnuaire) Naming.lookup("rmi://localhost/RemoteAnnuaire");
    			// Vérifie rle login et le mot de passe
    			reponse = rmiStub.login(profil, login, mdp);
    		} catch(NotBoundException nbe){
    			System.err.println("Serveur Rmi injoignable");
    		} catch (Exception e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    		return reponse;
    	}
    Par contre toi, tu n'utilise pas le port par default donc tu dois vérifier deux choses :
    1 - Que tu lance bien ton rmi registry avec le bon numéro de port
    2 - Modifie la chaine de cnx dans le naming.lookup
    Naming.lookup("rmi://adr/service:port");

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    142
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 142
    Par défaut
    J'ai le même souci, dans un contexte web que je teste en local.
    J'ai placé ce fichier dans web-inf/classes.
    Je le charge par le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.setProperty("java.security.policy", "wideopen.policy");
    Mais j'ai l'erreur suivante :

    class java.security.AccessControlExceptionaccess denied (java.util.PropertyPermission java.security.policy write)

    access denied (java.util.PropertyPermission java.security.policy write)

    Je suppose qu'il n'arrive pas à charger le fichier car si je lance l'application
    via un main ça fonctionne

    Je me demande où dois je placer ce fichier policy pour un contexte web ?

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    142
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 142
    Par défaut
    Je complète mon message en apportant un peu plus de précisions :
    voici mon code :
    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
     
            if (System.getSecurityManager() == null) {
                System.setSecurityManager(new SecurityManager());            
            }
            try {
            	System.setProperty("java.security.policy", "wideopen.policy");
            	Registry registry = LocateRegistry.getRegistry(1099);
            	IServiceTest stub = (IServiceTest)registry.lookup("Instance");
        	boolean response = stub.startService();
        	System.out.println("response: " +response);
            }
            catch(Exception e){
            	System.out.println("Error in the client : " +e.getClass().toString() +e.getMessage());
            	e.printStackTrace();
            }
    Si j'exécute via une fonction main ce code ca fonctionne.
    Si je le mets dans un environnement web alors que le fichier policy est dans le classpath j'ai l'erreur suivante :
    class java.security.AccessControlException access denied (java.util.PropertyPermission java.security.policy write)

    J'ai fait aussi les System.setProperty avant de faire le new SecurityManager() et dans ce cas même en le lançant avec la méthode main ca ne fonctionne pas

    Si vous avec des pistes, je suis preneur

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 15
    Par défaut RMi via Internet
    Ce qui est sûr c'est qu'il faut mettre le set sur le .policy avant de faire new SecurityManager, sinon il te marquera connexion refused.
    Fait cette modification et vérifie s'il lit bien ton fichier policy

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    142
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 142
    Par défaut
    Si je mets :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
      System.setProperty("java.security.policy", "wideopen.policy");		
      if (System.getSecurityManager() == null) {
                System.setSecurityManager(new SecurityManager());            
       }
       try {        	
           Registry registry = LocateRegistry.getRegistry(1099);
    ....
    j'ai cette erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    class java.security.AccessControlExceptionaccess denied (java.net.SocketPermission 127.0.0.1:1099 connect,resolve)
    Si je mets le setProperty après le new SecurityManager() ca fonctionne pour un main mais toujours pas dans un contexte web.
    J'ai essayé de mettre le chemin absolu du fichier, dans le classpath rien à faire. Je suis un peu à court d'idées

Discussions similaires

  1. Transfert de données securisées via Internet ???
    Par franck06 dans le forum Développement
    Réponses: 3
    Dernier message: 22/11/2004, 17h16
  2. est il possible de téléphoner via internet?
    Par soders dans le forum Messagerie instantanée
    Réponses: 5
    Dernier message: 19/11/2004, 18h07
  3. Connexion a un bd via internet
    Par toure32 dans le forum Bases de données
    Réponses: 4
    Dernier message: 24/07/2004, 19h33
  4. Exécutable gérant une base de données distante via internet
    Par paulgiot dans le forum Bases de données
    Réponses: 4
    Dernier message: 15/07/2004, 14h00
  5. Connexion à une base SQL_Serve via Internet
    Par Yoann_D dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 22/07/2003, 15h39

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