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

Collection et Stream Java Discussion :

Mapping réseau sous Java


Sujet :

Collection et Stream Java

  1. #1
    Nouveau candidat au Club
    Homme Profil pro
    Informaticien CFC (Suisse)
    Inscrit en
    Juin 2011
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Informaticien CFC (Suisse)
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2011
    Messages : 2
    Par défaut Mapping réseau sous Java
    Bonjour,

    Dans le cadre d'un travail pour une école, je dois effectuer une connexion sur des répertoires partagés. Pour indiquez le serveur, l'unité (sous Windows) et le répertoire, je récupère les information dans un fichier xml. Jusque là pas de problème.

    La connexion à ces différents répertoirs partagés doit pouvoir être effectuée depuis de OS différent : c'est ici que survient mon problème, sous Windows et Mac, le mapping se fait de fonction correcte alors que sous Linux, je ne parviens pas à connecter les lecteurs réseau, j'ai essayé de faire un mount mais sous Open Suse, un mot de passe m'est demandé lorsque je lance la commande dans une console, je ne parvient pas à transmettre le mot de passe pour pouvoir exécuter cette commande...

    Merci aux personnes qui prendront le temps de me lire et de me répondre.
    Les critiques sont acceptées vu que je codes rarement... et que je n'ai pas encore acquis une bonne façon de procéder...

    J'ai déjà essayer d'utiliser JCIFS mais j'avais des erreurs alors je suis parti sur une autre solution... (moins propre)

    Voici des parties du 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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
     
    //=======================================================================================================
    	// Création de la classe interne CMapping
    	//========================
    	// Cette classe ...
    	// - récupére le login de l'utilisateur
    	// - récupére le mot de passe de l'utilisateur
    	// - récupére le département choisi par l'user
    	// - appelle la fonction de lecture du fichier xml
    	// - en fonction de l'OS, appelle la fonction de connexion correspondante
    	//=======================================================================================================
    	public class CMapping implements ActionListener{
    		public void actionPerformed(ActionEvent e) {			
    			try {
    				NodeList nodes = fctRecupXML("fichier.xml", "/UserTypes/UserType[@Description='"+cboCategorie.getSelectedItem()+"']/Mapping/*/text()");
    				home = System.getProperty("user.home");	//Récupère l'emplacmemnt du répertoire home de l'user (utiliser pour mapping)
    				username = txtUserName.getText();
    				password = txtPwd.getText();
    				for (int i = 0; i <= (nodes.getLength()); i++) {// boucle for pour récupérer les infos pour le mapping et Mapping effectué en fin de boucle.
    					sDriveLetter = nodes.item(i).getNodeValue();
    					i = i+1;
    					sServerAddress = nodes.item(i).getNodeValue();
    					i = i+1;
    					sVolume = nodes.item(i).getNodeValue();
    					if (os.endsWith("7" )||os.endsWith("Vista")||os.endsWith("XP")){//Si OS : Windows
    						fctCheckLetter(sDriveLetter);
    						if (aLetter == false){
    							fctWindowsMapping(sDriveLetter, sServerAddress, sVolume);
    						}else{
    						}
    					}else if(os.endsWith("Linux")){//Si OS Linux
    						fctLinuxMapping(sDriveLetter, sServerAddress, sVolume);
    					}else if (os.startsWith("Mac")){//Si OS Mac
    						fctMacMapping(sDriveLetter, sServerAddress, sVolume);
    						fctWriteLog("User "+ username +" connected to "+sDriveLetter+":"+sVolume+"");
    					}
    					Thread.sleep(1500); // faire attendre le système 1.5 seconde
    				}
    			} catch (Exception e2) {
    			}
    		}	
    	}


    Fonction :
    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
     
     
     
    NodeList fctRecupXML(String nameFile, String path){// Fonction de récupération des noeuds XML
     
    		try {
    			DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance();
    			domFactory.setNamespaceAware(true); 
    			DocumentBuilder builder = domFactory.newDocumentBuilder();
    			Document doc = builder.parse(nameFile);
    			XPath xpath = XPathFactory.newInstance().newXPath();
    			XPathExpression expr = xpath.compile(path);// Requête XPath pour récupérer les valeurs enfants de l'UserType sélectionner depuis l'interface
     
    			Object result = expr.evaluate(doc, XPathConstants.NODESET);
    			NodeList noeud = (NodeList) result;
     
    			return noeud;
    		} catch (Exception e) {
    			// TODO: handle exception
    			e.printStackTrace();
    			return null;
    		}
    	}
     
     
     
     
    // Fonctions de mapping...
    	void fctMacMapping(String DriveLetter, String ServerAddress, String Volume) throws InterruptedException{
    		try {
    			Process p = r.exec("mkdir "+home+"/xxx/"+DriveLetter+"");
    			p.waitFor();
    			System.out.println(p.getInputStream().toString());
    		} catch (IOException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    		Thread.sleep(200); // faire attendre le système 2/10 secondes
    		try {
    			r.exec("ln -s "+home+"/xxx/MapMyDrive/MapMyDrive.jar "+home+"/xxx/"+DriveLetter+"/connect");
    		} catch (IOException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    		try {
    			r.exec("mount_smbfs //"+username+":"+password+"@"+ServerAddress+"/"+Volume +" "+home+"/xxx/"+DriveLetter+"");
    		} catch (IOException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    		Thread.sleep(200); // faire attendre le système 2/10 secondes
    	}
     
    	void fctLinuxMapping(String DriveLetter, String ServerAddress, String Volume){
    		try {
    			r.exec("mkdir "+home+"/xxx/"+DriveLetter+"");
    		} catch (IOException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    		try {
    			r.exec("mount //"+username+":"+password+"@"+ServerAddress+"/"+Volume +" "+home+"/xxx/"+DriveLetter+"");
    		} catch (IOException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    	}
     
    	void fctWindowsMapping(String DriveLetter, String ServerAddress, String Volume) throws InterruptedException{
    		try {
    			System.out.println("Start");
    			Process p = r.exec("cmd /c net use "+DriveLetter+": \\\\"+ServerAddress+"\\"+Volume+"  "+password+" /USER:"+username+" /PERSISTENT:NO");
    			String s =null; 
     
    			BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream())); 
     
    			StringBuffer buffer = new StringBuffer(); 
     
    			while ((s = reader.readLine()) != null) { 
    			buffer.append(s); 
    			} 
     
    			String result = buffer.toString(); 
    			System.out.println(result); 
     
    			if (result.equals("La commande s'est termin‚e correctement.")){
    				fctWriteLog("User "+ username +" connected to "+sDriveLetter+":"+sVolume+"");
    				fctChangeEnableToDisable();
    				mapping = true;
    			}else{
    				fctWriteLog("An error occurred while connecting... Yar are not connected to "+sDriveLetter+":"+sVolume+"");
    				mapping = false;
    			}
     
    			} catch (IOException e) {
    				e.printStackTrace();}		
    			System.out.println("Fin");
    	}
     
    File[] fctRecupLetter() {
    		File[] roots = File.listRoots();
    		for(int i= 0; i < roots.length; i++){
    		}
    		return roots;
    	}
     
    	boolean fctCheckLetter(String DriveLetter){
    		File[] root = fctRecupLetter();
    		String DriveLetter2;
    		DriveLetter2 = DriveLetter+":\\";
    		for (int i = 0; i < root.length; i++){
    			String test = root[i].toString();
    			if (test.equals(DriveLetter2) ){
    				aLetter = true;
    				fctWriteLog("Drive "+sDriveLetter+" is already assigned.");
    				JOptionPane.showMessageDialog(null, "Drive "+sDriveLetter+" is already assigned.", "Erreur", JOptionPane.ERROR_MESSAGE);
    			}else{
    				aLetter =  false;
    			}
    		}
    		return aLetter;
    	 }

  2. #2
    Modérateur

    Avatar de Robin56
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juin 2009
    Messages
    5 297
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juin 2009
    Messages : 5 297
    Par défaut
    En gros, si j'ai bien compris, ton problème se résumerait par : "comment lancer un Runtime.exec() en root sous Linux ?".

    Tout d'abord, une petite remarque, je crois qu'il est préférable d'utiliser ProcessBuilder que Process depuis Java 1.5.
    Ensuite, j'ai trouvé ceci qui semble répondre à ton soucis : source
    Responsable Java de Developpez.com (Twitter et Facebook)
    Besoin d'un article/tutoriel/cours sur Java, consulter la page cours
    N'hésitez pas à consulter la FAQ Java et à poser vos questions sur les forums d'entraide Java
    --------
    Architecte Solution
    LinkedIn : https://www.linkedin.com/in/nicolascaudard/

  3. #3
    Nouveau candidat au Club
    Homme Profil pro
    Informaticien CFC (Suisse)
    Inscrit en
    Juin 2011
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Informaticien CFC (Suisse)
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2011
    Messages : 2
    Par défaut
    Citation Envoyé par Robin56 Voir le message
    En gros, si j'ai bien compris, ton problème se résumerait par : "comment lancer un Runtime.exec() en root sous Linux ?".

    Tout d'abord, une petite remarque, je crois qu'il est préférable d'utiliser ProcessBuilder que Process depuis Java 1.5.
    Ensuite, j'ai trouvé ceci qui semble répondre à ton soucis : source
    Merci pour ta réponse je vais essayé

  4. #4
    Membre confirmé
    Homme Profil pro
    etudiant / developpeur
    Inscrit en
    Décembre 2009
    Messages
    131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : etudiant / developpeur

    Informations forums :
    Inscription : Décembre 2009
    Messages : 131
    Par défaut
    j'ai juste deux remarque a apporter sur ton code.

    une première petite chose : pour incrémenter un int tu peux directement faire i++ (au lieu de faire un i = i+1)

    sinon la deuxième chose qui m'interpelle se passe dans ta boucle for(int i ;condition;i++)

    dans ta boucle tu touche directement au compteur i.
    la boucle for va gérer automatiquement sont compteur.

    Si tu a besoin de modifier le compteur directement dans la boucle il serai préférable d'utiliser un autre type de boucle.

Discussions similaires

  1. Probleme avec ma carte réseau sous win 98 ?
    Par Le Pharaon dans le forum Autres Logiciels
    Réponses: 3
    Dernier message: 27/04/2005, 10h40
  2. Réponses: 9
    Dernier message: 05/04/2005, 09h39
  3. [Système][Class-Path]cherche aide sous java pour fedoracore ou linux
    Par mickey hollywood dans le forum Général Java
    Réponses: 4
    Dernier message: 29/03/2005, 01h13
  4. pbm config réseau sous vmware
    Par tonf dans le forum VMware
    Réponses: 4
    Dernier message: 17/07/2004, 10h49

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