Voila, j'ai dévellopé un applet en JAVA permettant aux visiteurs du site web
de s'enregistrer avec leurs micro, puis de sauvegarder leur travail sur leur
disque.
L'applet fonctionne correctement lorsque je lance la page depuis mon disque
dur.Mais lorsque je le lance depuis un serveur distant, la console java
m'affiche : "java.security.AccessControlException: access denied
(javax.sound.sampled.AudioPermission record)".
Je me suis un peu renseigné, et j'ai fait signer mon applet :
"jarsigner magneto.jar mon_pseudo", en ayant auparavant généré une clé
(keytool).
J'ai également ajouter une permissin sur le policytool (allpermission), et
ça n'a rien changé.
Donc la je ne sais absolument pas quoi faire pour que mon applet fonctionne
!
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
David JOURAND
Bonjour,
Je me suis un peu renseigné, et j'ai fait signer mon applet : "jarsigner magneto.jar mon_pseudo", en ayant auparavant généré une clé (keytool).
Indispensable.
J'ai également ajouter une permissin sur le policytool (allpermission), et ça n'a rien changé.
Cela ne sert à rien, car vous ne pourrez pas modifier la configuration de tous vos utilisateurs.
Donc la je ne sais absolument pas quoi faire pour que mon applet fonctionne !
L'action soumise à controle d'accès (celle levant l'exception dans votre cas) doit être réalisée dans la méthode run d'une classe implémentant java.security.PrivilegedAction
-- David Jourand
Bonjour,
Je me suis un peu renseigné, et j'ai fait signer mon applet :
"jarsigner magneto.jar mon_pseudo", en ayant auparavant généré une clé
(keytool).
Indispensable.
J'ai également ajouter une permissin sur le policytool (allpermission), et
ça n'a rien changé.
Cela ne sert à rien, car vous ne pourrez pas modifier la configuration de
tous vos utilisateurs.
Donc la je ne sais absolument pas quoi faire pour que mon applet
fonctionne !
L'action soumise à controle d'accès (celle levant l'exception dans
votre cas) doit être réalisée dans la méthode run d'une classe
implémentant java.security.PrivilegedAction
Je me suis un peu renseigné, et j'ai fait signer mon applet : "jarsigner magneto.jar mon_pseudo", en ayant auparavant généré une clé (keytool).
Indispensable.
J'ai également ajouter une permissin sur le policytool (allpermission), et ça n'a rien changé.
Cela ne sert à rien, car vous ne pourrez pas modifier la configuration de tous vos utilisateurs.
Donc la je ne sais absolument pas quoi faire pour que mon applet fonctionne !
L'action soumise à controle d'accès (celle levant l'exception dans votre cas) doit être réalisée dans la méthode run d'une classe implémentant java.security.PrivilegedAction
-- David Jourand
BOURGAREL Rémi
J'ai fait ce que vous m'avez conseillé,ça n'a pas marché :
j'ai crée une classe implémentant java.security.PrivilegedAction, avec la méthode Object run() qui execute ma méthode.Le problème viens de l'appel de la méthode targetDataLine.open(audioFormat);.
Merci :)
J'ai fait ce que vous m'avez conseillé,ça n'a pas marché :
j'ai crée une classe implémentant java.security.PrivilegedAction, avec la
méthode Object run() qui execute ma méthode.Le problème viens de l'appel de
la méthode targetDataLine.open(audioFormat);.
J'ai fait ce que vous m'avez conseillé,ça n'a pas marché :
j'ai crée une classe implémentant java.security.PrivilegedAction, avec la méthode Object run() qui execute ma méthode.Le problème viens de l'appel de la méthode targetDataLine.open(audioFormat);.
Merci :)
David JOURAND
j'ai crée une classe implémentant java.security.PrivilegedAction, avec la méthode Object run() qui execute ma méthode.Le problème viens de l'appel de la méthode targetDataLine.open(audioFormat);.
Sans un peu de code, il est difficile de vous comprendre... Donnez ici les principaux éléments de votre code afin que l'on puisse l'étudier.
-- David Jourand
j'ai crée une classe implémentant java.security.PrivilegedAction, avec la
méthode Object run() qui execute ma méthode.Le problème viens de l'appel de
la méthode targetDataLine.open(audioFormat);.
Sans un peu de code, il est difficile de vous comprendre... Donnez ici les
principaux éléments de votre code afin que l'on puisse l'étudier.
j'ai crée une classe implémentant java.security.PrivilegedAction, avec la méthode Object run() qui execute ma méthode.Le problème viens de l'appel de la méthode targetDataLine.open(audioFormat);.
Sans un peu de code, il est difficile de vous comprendre... Donnez ici les principaux éléments de votre code afin que l'on puisse l'étudier.
-- David Jourand
BOURGAREL Rémi
Alors voila le code avant modification :
private void getMicro(){ //cherche tout ce qu'il faut pour l'enregistrmenet System.out.println("debut getMicro."); audioFormat = getAudioFormat(); System.out.println("getAudioFormat fini."); DataLine.Info dataLineInfo = new DataLine.Info(TargetDataLine.class,audioFormat); System.out.println("new Dataline.info fini."); targetDataLine = (TargetDataLine) AudioSystem.getLine(dataLineInfo); System.out.println("AudioSystem.getLine(dataLineinfo) fini."); ----------------s'arrète ici ---------------- targetDataLine.open(audioFormat); System.out.println("targetdataline ouvert."); targetDataLine.start(); System.out.println("targetdataline démarré ."); //crée un thread pour la capture, jusqu'a que le obuton "stop" soit enfoncé Thread captureThread = new Thread(new CaptureThread()); System.out.println("capture thread crée."); captureThread.start(); System.out.println("capture thread démarré."); } catch (Exception e) { System.out.println(e); System.exit(0); }//fin catch }//fin méthode getMicro
Une fois la modification apportée :
class Open implements java.security.PrivilegedAction { public Object run(){ try{ //cherche tout ce qu'il faut pour l'enregistrmenet System.out.println("debut getMicro."); audioFormat = getAudioFormat(); System.out.println("getAudioFormat fini."); DataLine.Info dataLineInfo = new DataLine.Info(TargetDataLine.class,audioFormat); System.out.println("new Dataline.info fini."); targetDataLine = (TargetDataLine) AudioSystem.getLine(dataLineInfo); System.out.println("AudioSystem.getLine(dataLineinfo) fini."); ----------------s'arrète ici ---------------- targetDataLine.open(audioFormat); System.out.println("targetdataline ouvert."); targetDataLine.start(); System.out.println("targetdataline démarré ."); //crée un thread pour la capture, jusqu'a que le obuton "stop" soit enfoncé Thread captureThread = new Thread(new CaptureThread()); System.out.println("capture thread crée."); captureThread.start(); System.out.println("capture thread démarré."); } catch (Exception e) { System.out.println(e); System.exit(0); }//fin catch return null; } } private void getMicro(){
Open openTarget = new Open(); openTarget.run();
}//end captureAudio method
La methode getMicro est appellée quand on clique sur un bouton, voici le code du actionlistener :
public void actionPerformed(ActionEvent e){ info.setText("Initialisation, patientez ..."); getMicro(); info.setText("Enregistrement en cours ..."); }
La plupart du code pour l'enregistrement n'est pas de moi.
Voila, en espérant que je ne suis pas un cas desespéré :)
Merci encore :)
Alors voila le code avant modification :
private void getMicro(){
//cherche tout ce qu'il faut pour l'enregistrmenet
System.out.println("debut getMicro.");
audioFormat = getAudioFormat();
System.out.println("getAudioFormat fini.");
DataLine.Info dataLineInfo = new
DataLine.Info(TargetDataLine.class,audioFormat);
System.out.println("new Dataline.info fini.");
targetDataLine = (TargetDataLine)
AudioSystem.getLine(dataLineInfo);
System.out.println("AudioSystem.getLine(dataLineinfo) fini.");
----------------s'arrète ici ----------------
targetDataLine.open(audioFormat);
System.out.println("targetdataline ouvert.");
targetDataLine.start();
System.out.println("targetdataline démarré .");
//crée un thread pour la capture, jusqu'a que le obuton "stop" soit
enfoncé
Thread captureThread = new Thread(new CaptureThread());
System.out.println("capture thread crée.");
captureThread.start();
System.out.println("capture thread démarré.");
} catch (Exception e) {
System.out.println(e);
System.exit(0);
}//fin catch
}//fin méthode getMicro
Une fois la modification apportée :
class Open implements java.security.PrivilegedAction {
public Object run(){
try{
//cherche tout ce qu'il faut pour l'enregistrmenet
System.out.println("debut getMicro.");
audioFormat = getAudioFormat();
System.out.println("getAudioFormat fini.");
DataLine.Info dataLineInfo = new
DataLine.Info(TargetDataLine.class,audioFormat);
System.out.println("new Dataline.info fini.");
targetDataLine = (TargetDataLine)
AudioSystem.getLine(dataLineInfo);
System.out.println("AudioSystem.getLine(dataLineinfo) fini.");
----------------s'arrète ici ----------------
targetDataLine.open(audioFormat);
System.out.println("targetdataline ouvert.");
targetDataLine.start();
System.out.println("targetdataline démarré .");
//crée un thread pour la capture, jusqu'a que le obuton "stop" soit
enfoncé
Thread captureThread = new Thread(new CaptureThread());
System.out.println("capture thread crée.");
captureThread.start();
System.out.println("capture thread démarré.");
} catch (Exception e) {
System.out.println(e);
System.exit(0);
}//fin catch
return null;
}
}
private void getMicro(){
Open openTarget = new Open();
openTarget.run();
}//end captureAudio method
La methode getMicro est appellée quand on clique sur un bouton, voici le
code du actionlistener :
public void actionPerformed(ActionEvent e){
info.setText("Initialisation, patientez ...");
getMicro();
info.setText("Enregistrement en cours ...");
}
La plupart du code pour l'enregistrement n'est pas de moi.
Voila, en espérant que je ne suis pas un cas desespéré :)
public Object run() { targetDataLine.open(audioFormat); return null } }
Et remplacez, dans le code original, l'appel :
targetDataLine.open(audioFormat);
par :
PrivilegedAudioOpener audioOpener = new PrivilegedAudioOpener(audioFormat, targetDataLine); AccessController.doPrivileged(audioOpener));
Lire la documentation (API sun) vous aurait permis d'avancer seul : "A computation to be performed with privileges enabled. The computation is performed by invoking AccessController.doPrivileged on the PrivilegedAction object."
-- David Jourand
Le Wed, 31 May 2006 10:07:14 +0200, BOURGAREL Rémi a écrit :
Essayez de ne mettre que cet appel dans la méthode run de l'objet
implémentant java.security.PrivilegedAction :
public class PrivilegedAudioOpener implements PrivilegedAction {
private YYY audioFormat = null;
private XXX targetDataLine = null
public Object run() {
targetDataLine.open(audioFormat);
return null
}
}
Et remplacez, dans le code original, l'appel :
targetDataLine.open(audioFormat);
par :
PrivilegedAudioOpener audioOpener = new
PrivilegedAudioOpener(audioFormat, targetDataLine);
AccessController.doPrivileged(audioOpener));
Lire la documentation (API sun) vous aurait permis d'avancer seul : "A
computation to be performed with privileges enabled. The computation is
performed by invoking AccessController.doPrivileged on the
PrivilegedAction object."
public Object run() { targetDataLine.open(audioFormat); return null } }
Et remplacez, dans le code original, l'appel :
targetDataLine.open(audioFormat);
par :
PrivilegedAudioOpener audioOpener = new PrivilegedAudioOpener(audioFormat, targetDataLine); AccessController.doPrivileged(audioOpener));
Lire la documentation (API sun) vous aurait permis d'avancer seul : "A computation to be performed with privileges enabled. The computation is performed by invoking AccessController.doPrivileged on the PrivilegedAction object."
-- David Jourand
BOURGAREL Rémi
Merci beaucoup, votre aide a réglé mon problème, et je l'ai compris :D. Sauf qu'il en subsiste un, dont je pense connaitre la cause, mais il me faudrait une confirmation :
sur mon poste (jree 1.4.2) l'applet marche comme il faut, mais sur un autre poste (jree 1.3 et quelques), la levée d'exeption persiste.Je pense que cela viens de la version du JREE, mais je n'en suis pas sur, et si c'est le cas, connaissez vous un remède a ce problème a part mettre a jour le jree ?
Merci beaucoup, votre aide a réglé mon problème, et je l'ai compris :D. Sauf
qu'il en subsiste un, dont je pense connaitre la cause, mais il me faudrait
une confirmation :
sur mon poste (jree 1.4.2) l'applet marche comme il faut, mais sur un autre
poste (jree 1.3 et quelques), la levée d'exeption persiste.Je pense que cela
viens de la version du JREE, mais je n'en suis pas sur, et si c'est le cas,
connaissez vous un remède a ce problème a part mettre a jour le jree ?
Merci beaucoup, votre aide a réglé mon problème, et je l'ai compris :D. Sauf qu'il en subsiste un, dont je pense connaitre la cause, mais il me faudrait une confirmation :
sur mon poste (jree 1.4.2) l'applet marche comme il faut, mais sur un autre poste (jree 1.3 et quelques), la levée d'exeption persiste.Je pense que cela viens de la version du JREE, mais je n'en suis pas sur, et si c'est le cas, connaissez vous un remède a ce problème a part mettre a jour le jree ?
David JOURAND
sur mon poste (jree 1.4.2) l'applet marche comme il faut, mais sur un autre poste (jree 1.3 et quelques), la levée d'exeption persiste.Je pense que cela viens de la version du JREE, mais je n'en suis pas sur, et si c'est le cas, connaissez vous un remède a ce problème a part mettre a jour le jree ?
Est-ce la même exception qui est levée ? Sinon, il est possible de générer du code pour une version antérieure via l'option -target de javac. Qualifiez mieux votre problème et faites un nouveau post dans ce NG en mettant un sujet adapté.
-- David Jourand
sur mon poste (jree 1.4.2) l'applet marche comme il faut, mais sur un autre
poste (jree 1.3 et quelques), la levée d'exeption persiste.Je pense que cela
viens de la version du JREE, mais je n'en suis pas sur, et si c'est le cas,
connaissez vous un remède a ce problème a part mettre a jour le jree ?
Est-ce la même exception qui est levée ? Sinon, il est possible de
générer du code pour une version antérieure via l'option -target de
javac. Qualifiez mieux votre problème et faites un nouveau post dans ce
NG en mettant un sujet adapté.
sur mon poste (jree 1.4.2) l'applet marche comme il faut, mais sur un autre poste (jree 1.3 et quelques), la levée d'exeption persiste.Je pense que cela viens de la version du JREE, mais je n'en suis pas sur, et si c'est le cas, connaissez vous un remède a ce problème a part mettre a jour le jree ?
Est-ce la même exception qui est levée ? Sinon, il est possible de générer du code pour une version antérieure via l'option -target de javac. Qualifiez mieux votre problème et faites un nouveau post dans ce NG en mettant un sujet adapté.