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

Applets Java Discussion :

Accès fichiers client depuis applet


Sujet :

Applets Java

  1. #1
    Membre régulier
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Décembre 2006
    Messages
    255
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2006
    Messages : 255
    Points : 100
    Points
    100
    Par défaut Accès fichiers client depuis applet
    Bonjour,

    j'ai besoin de pouvoir ouvrir un répertoire sur le client (à l'aide de l'explorateur), et même, plus tard, d'écrire des fichiers sur le client.
    J'utilise donc une applet.

    Voici comment je procède :

    L'applet :

    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
    package mypackage;
    import java.awt.BorderLayout;
    import java.awt.Color;
     
    import java.io.IOException;
    import javax.swing.JApplet;
    import javax.swing.JLabel;
     
    public class Applet1 extends JApplet {
     
    	private JLabel label = new JLabel();
     
    	public void init(){
    		this.setSize(200, 100);
    		label.setHorizontalAlignment(JLabel.CENTER);
    		label.setForeground(Color.blue);
    		label.setText("Applet chargée");
    		this.getContentPane().add(label, BorderLayout.NORTH);
    	}
     
    	public void openFolder(String path){
    		label.setText(path);
    		try {
    			Runtime.getRuntime().exec("cmd /c start "+path);
    		}
    		catch(IOException e){ e.printStackTrace(); }
    	}
     
    }
    La fonction openFolder sera appelée depuis JavaScript.
    J'y ai intégré un JLabel pour voir si l'appel fonctionne.
    Ainsi depuis le Javascript, je l'appel comme ceci sur le clic d'un bouton :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    document.applets[0].openFolder('C:\\jan');
    Lorsque j'exécute cmd /c start C:\\jan directement dans "Démarrer -> Exécuter", cela m'ouvre bien le répertoire, donc la commande est bonne.

    Signature de l'applet :

    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
     
    C:\Documents and Settings\moi>cd C:\DevSuiteHome_1\jdk\bin
     
    C:\DevSuiteHome_1\jdk\bin>keytool -genkey -alias MyApplet
    Enter keystore password:  mypwd
    What is your first and last name?
      [Unknown]:  My Name
    What is the name of your organizational unit?
      [Unknown]:  My Unit
    What is the name of your organization?
      [Unknown]:  My Organization
    What is the name of your City or Locality?
      [Unknown]:  Geneva
    What is the name of your State or Province?
      [Unknown]:  GE
    What is the two-letter country code for this unit?
      [Unknown]:  CH
    Is CN=My Name, OU=My Unit, O=My Organization, L=Geneva, ST=GE, C=CH correct?
      [no]:  y
     
    Enter key password for <MyApplet>
            (RETURN if same as keystore password):  myappletpwd
     
    C:\DevSuiteHome_1\jdk\bin>jarsigner -verbose archive1.jar MyApplet
    Enter Passphrase for keystore: mypwd
    Enter key password for MyApplet: myappletpwd
     updating: META-INF/MANIFEST.MF
       adding: META-INF/GEODEAPP.SF
       adding: META-INF/GEODEAPP.DSA
      signing: mypackage/Applet1$1.class
      signing: mypackage/Applet1.class
     
    C:\DevSuiteHome_1\jdk\bin>jarsigner -verify -verbose archive1.jar
     
             221 Wed Jun 22 14:20:56 CEST 2011 META-INF/MANIFEST.MF
             278 Wed Jun 22 14:20:56 CEST 2011 META-INF/GEODEAPP.SF
             995 Wed Jun 22 14:20:56 CEST 2011 META-INF/GEODEAPP.DSA
    smk     1180 Tue Jun 21 10:01:08 CEST 2011 mypackage/Applet1$1.class
    smk     1537 Wed Jun 22 09:31:20 CEST 2011 mypackage/Applet1.class
     
      s = signature was verified
      m = entry is listed in manifest
      k = at least one certificate was found in keystore
      i = at least one certificate was found in identity scope
     
    jar verified.
     
    C:\DevSuiteHome_1\jdk\bin>
    Donc le jar est bien signé.

    Code HTML de l'applet :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <applet archive="monchemin/archive1.jar" code="mypackage/Applet1.class" width="200" height="100">
        Applet Java
    </applet>

    Voilà, tout à l'air bon, néanmoins lorsque j'exécute ma page avec Firefox (3.6), j'ai bien l'avertissement de sécurité («The application's digital signature cannot be verified. Do you want to run the application»). Je répond "run" bien sûr.

    Le JLabel de l'applet affiche bien "Applet chargée".
    Puis quand je clic sur mon bouton qui lance la fonction javascript, j'ai bien "C:\jan" qui s'affiche dans le JLabel. Donc la communication fonctionne bien.

    Seulement rien ne se passe, pas d'ouverture de répertoire, et dans la console Firefox j'ai l'erreur :

    Error: uncaught exception: java.security.AccessControlException: access denied (java.io.FilePermission <<ALL FILES>> execute) à chaque fois aue je clic sur le bouton.
    Aucune erreur dans la console Java.

    Aurais-je oublié quelque-chose ?

    Merci pour votre aide.

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    765
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 765
    Points : 1 036
    Points
    1 036
    Par défaut
    Bonjour,

    Surement que tu n'as pas mis les droits dans le policy pour "execute" un répertoire, c'est à dire voir ce qu'il y a dedans.

  3. #3
    Membre régulier
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Décembre 2006
    Messages
    255
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2006
    Messages : 255
    Points : 100
    Points
    100
    Par défaut
    C'est obligatoire ?
    Quel est le but de signer une applet alors ?

    Ce lien http://www.oreilly.com/catalog/learn...te/Signed.html permet de créer un fichier sur le client (testez, cela fonctionne), et je n'ai pourtant rien modifié dans mon policy, alors comment il fait ?

    Merci !

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    765
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 765
    Points : 1 036
    Points
    1 036
    Par défaut
    Non en principe tu devrais pouvoir y arriver avec une applet signée.
    Ou alors tu fais du javascript pour appeler une méthode de l'applet.

  5. #5
    Membre régulier
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Décembre 2006
    Messages
    255
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2006
    Messages : 255
    Points : 100
    Points
    100
    Par défaut
    Oui c'est le JavaScript qui appel une méthode de l'applet.

    J'ai essayé d'ajouter :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    grant {
      permission java.io.FilePermission "C:/*", "execute";
    };
    dans mon java.policy (C:\Program Files\Java\jre6\lib\security) mais cela ne change rien de toute façon.

    Je ne comprend pas !

    Merci pour ton aide.

  6. #6
    Membre régulier
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Décembre 2006
    Messages
    255
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2006
    Messages : 255
    Points : 100
    Points
    100
    Par défaut
    Bon ça fonctionne en ajoutant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    grant {
    	permission java.security.AllPermission;
    };
    ou mieux :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    grant {
    	permission java.io.FilePermission "<<ALL FILES>>","execute";
    };
    dans le java.policy.

    Mais il faut que je trouve une autre solution pour avoir à éviter de faire ça sur tous les clients. Et c'est peut-être assez dangereux aussi...

  7. #7
    Membre régulier
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Décembre 2006
    Messages
    255
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2006
    Messages : 255
    Points : 100
    Points
    100
    Par défaut
    OK donc en fait ça vient du fait que j'appel la méthode depuis JavaScript. La JVM apparemment considère comme non sécurisé l'appel de fonction depuis Javascript.

    Lorsque j'appel directement la fonction dans l'applet, cela fonctionne même sans modifier le java.policy.

    Il faut alors que je trouve un autre moyen d'appeler cette fonction depuis la page, peut-être en passant par une servlet qui elle appellerait la fonction de l'applet ?

    Si quelqu'un a une idée qu'il n'hésite pas.

  8. #8
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    765
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 765
    Points : 1 036
    Points
    1 036
    Par défaut
    Donc c'est l'appel javascript qui annule ta signature.
    C'est une sécurité supplémentaire pour éviter le code malveillant en javascript.

  9. #9
    Membre régulier
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Décembre 2006
    Messages
    255
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2006
    Messages : 255
    Points : 100
    Points
    100
    Par défaut
    OK ça fonctionne en utilisant AccessController.doPrivileged :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    public void openFolder(final String path){
    	AccessController.doPrivileged(new PrivilegedAction() {
    		public Object run() {
    			try {
    				Runtime.getRuntime().exec("cmd /c start "+path);
    			}
    			catch(IOException e){ e.printStackTrace(); }
    			return null;
    		}
    	});
    }
    Merci Jimmy pour ton aide.

    A+.

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

Discussions similaires

  1. [Débutant] Généré le client depuis un fichier WSDL
    Par chronos dans le forum Services Web
    Réponses: 6
    Dernier message: 02/08/2007, 12h01
  2. Question sur accès fichier word depuis excel (VBA)
    Par jerome.grange dans le forum VBA Word
    Réponses: 6
    Dernier message: 22/09/2006, 17h34
  3. Envoi de fichier au client depuis une servlet
    Par vedrfolnir dans le forum Servlets/JSP
    Réponses: 12
    Dernier message: 04/07/2006, 14h57
  4. [ Debutant ][ Jar ] Accès fichier externe depuis Jar
    Par Warz dans le forum API standards et tierces
    Réponses: 6
    Dernier message: 22/05/2006, 11h32

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