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 :

delete de fichier par applet signée appelé par JavaScript


Sujet :

Applets Java

  1. #1
    Membre à l'essai
    Profil pro
    Développeur Java
    Inscrit en
    Octobre 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Octobre 2007
    Messages : 17
    Points : 13
    Points
    13
    Par défaut "delete" ne fonctionne plus lorsque JavaScript appelle une applet signée


    note :
    • Developement sous Java 1.4.2
    • Execution (applet)sous 1.6.0
    • Navigateur : IE exclusivement (dès version 5/6)


    Je viens de chercher un bon moment sans succès. J'ai développé une applet signée qui copie et modifie des fichiers PDF sur le disque de l'utilisateur.

    Dans une classe "utils", une fonction "deleteDir()" est appelée à deux endroits de mon code:

    1. elle est appelée depuis l'Applet pour effacer un dossier de travail temporaire lors d'une annulation de l'opération en cours.
    2. elle est appelée depuis la page web via une fonction JavaScript lorsqu'on souhaite annuler les modifications et quitter l'Applet.


    Une capture de l'applet est en pièce jointe.

    Voici le code :

    - appelé par JavaScript :

    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
    	// --- used by JavaScript in web page
    	public boolean cancelRequest(){
    		boolean isCancelOk = true;
     
    		System.out.println("[cancelRequest - 1]");
     
    		if (!getDataDesc().isUpdateOriginalData() 
    		&& getDataDesc().getOutputDirectory().isDirectory() 
    		&& !getDataDesc().isCancelCopy())
     
    			try {
    				System.out.println("[cancelRequest - 2]");
    				Utils.deleteDir(getDataDesc().getOutputDirectory());
    				System.out.println("[cancelRequest - 3]");
    			} catch (Exception e) {
    				isCancelOk = false;
    				e.printStackTrace();
    			}
     
    		System.out.println("[cancelRequest - 4]");
     
    		return isCancelOk;
    	}
    - pour effacer mon répertoire:

    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
    	public synchronized static void deleteDir(File theDirectory) throws Exception {
    		if( theDirectory.exists() ) {
    		  File[] files = theDirectory.listFiles();
    		  for(int i=0; i<files.length; i++) {
    			 if(files[i].isDirectory()) 
    				// delete directory
    				deleteDir(files[i]);			 
    			 else
    			 	// delete file
    			 	if (!files[i].delete())
    			   		throw new Exception(files[i].getAbsolutePath());
    		  }
    		}
    		if (!theDirectory.delete())
    			throw new Exception(theDirectory.getAbsolutePath());
     
    	 }
    Dans le 1er cas, le dossier est bien effacé, dans le 2nd, je reçois une exception :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Exception in thread "Thread-16" 
    [cancelRequest - 1]
    [cancelRequest - 2]
    java.security.AccessControlException: access denied (java.io.FilePermission D:\samples\add_bookmarks\100_out read)
    	at java.security.AccessControlContext.checkPermission(Unknown Source)
    	at java.security.AccessController.checkPermission(Unknown Source)
    	at java.lang.SecurityManager.checkPermission(Unknown Source)
    	at java.lang.SecurityManager.checkRead(Unknown Source)
    	at java.io.File.isDirectory(Unknown Source)
    	at org.epo.bli.gui.user.pdfApplet.MainClass$1.run(MainClass.java:141)
    	at java.lang.Thread.run(Unknown Source)

    La question est "simple" ( la réponse aussi?)...

    Pourquoi l'applet peut-elle effacer mon dossier lorsqu'elle est appelée directement par un bouton et pourquoi ne le peut-elle pas quand la méthode est appelée depuis JavaScript? Java détecte-t-il l'origine de l'appel? Comment pallier à ceci?

    Note: j'ai essayé un "System.setSecurityManager(null); " dans le thread utilisé pour la suppression du cas 2 - appel depuis JavaScript. Résultat : Une exception, "pas le droit"

    Un grand merci à qui pourra m'aider!

    David
    Images attachées Images attachées  

  2. #2
    Membre à l'essai
    Profil pro
    Développeur Java
    Inscrit en
    Octobre 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Octobre 2007
    Messages : 17
    Points : 13
    Points
    13
    Par défaut ... hhmmm ... help ?


    Je sais que ça peut poser de gros problèmes de sécurité () mais il s'agit d'une application interne qui s'inscrit dans un "workflow" bien défini.

    Un expert dans le domaine?

    Si quelqu'un veut me répondre "en privé" pour éviter que la réponse soit utilisée à mauvais escient, je vous en serais très reconnaissant!



    David

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 4
    Points : 4
    Points
    4
    Par défaut
    C'est normal : autant ton applet est signée, autant le code Javascript qui l'appelle ne l'est pas. Du coup, on ne lui fait pas confiance et l'appel s'exécute dans un constexte contraint.

    Cf. http://www.snowbound.com/tech_tips/g...plet_java.html

Discussions similaires

  1. Réponses: 2
    Dernier message: 06/03/2013, 11h07
  2. Réponses: 2
    Dernier message: 07/08/2011, 11h51
  3. Pourquoi Zend Studio ne lance-t-il pas le fichier appelé par "ACTION"
    Par Claude_Azoulai dans le forum Zend Studio
    Réponses: 4
    Dernier message: 22/09/2007, 02h54
  4. [AJAX] Fichier ASP appelé par AJAX
    Par dragonfly dans le forum Général JavaScript
    Réponses: 24
    Dernier message: 14/06/2007, 11h14
  5. Réponses: 2
    Dernier message: 20/03/2007, 11h50

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