Java applet java.de sécurité.AccessControlException
Je travaille sur une applet Java qui imprime un fichier.
L'applet est "auto-signé".
La fonction d'impression est:
//argFilePath : path to file (http://localhost/Teste/pdf1.pdf)
//argPrintService : something like PrintServiceLookup.lookupDefaultPrintService()
private int print(String argFilePath, PrintService argPrintService){
try
{
DocPrintJob printJob = argPrintService.createPrintJob();
Doc doc;
DocAttributeSet docAttrSet = new HashDocAttributeSet();
PrintRequestAttributeSet printReqAttr = new HashPrintRequestAttributeSet();
URL url = new URL(argFilePath);
doc = new SimpleDoc(url.openStream(), DocFlavor.INPUT_STREAM.AUTOSENSE, docAttrSet);
printJob.print(doc, printReqAttr);
} catch (Exception e) {
System.out.println(e);
return 1;
}
return 0;
}
- Je obtenir cette exception lorsque vous essayez d'ouvrir le fichier:
java.security.AccessControlException: access denied (java.net.SocketPermission 127.0.0.1:80 connect,resolve)
HTML/JavaScrip
<input onclick="alert(document.getElementById('xpto').print('http://localhost/Teste/pdf1.pdf'));" type="button"/>
<applet width="180" height="120" code="printers.class" id="xpto" archive="printerAPI.jar"></applet>
est correcte à utiliser:
DocFlavor.INPUT_STREAM.AUTOSENSE
L'idée semble être à imprimer autant de type de fichier que possible - pdf, docx, jpg, etc.
Comment pouvez-vous fixer l'exception?
OriginalL'auteur V1tOr | 2011-03-26
Vous devez vous connecter pour publier un commentaire.
Trouvé la réponse sur stackoverflow lol :D)!
Il semble que le problème était:
"le javascript n'ont pas les autorisations d'accès au fichier"
si l'applet est bloqué. nous devons utiliser
doPrivileged
Voici mon oeuvre:
OriginalL'auteur V1tOr
Vous avez probablement obtenu ceci:
parce que les applets ne peuvent pas faire des liens vers des sites web autres que celui qu'ils venaient de. Maintenant, c'est terriblement stupide parce que l'on pense,
localhost
n'est pas un autre site, mais le Java SecurityManager faut seulement regarder l'adresse IP. Par conséquent, si le navigateur est connecté à74.125.224.224
puis l'applet Java se connecter à cette adresse, ce qui est différent delocalhost
, dont l'adresse est127.0.0.1
.Ce sera juste prendre soin de la Socket erreur d'Autorisation. Mais, vous aurez probablement courir dans quelque chose d'autre si vous essayez d'accéder matériel de l'utilisateur. Dans ce cas, vous aurez besoin de faire un certificat et l'utilisateur de choisir si ou de ne pas exécuter l'applet.
Si vous voulez juste l'exécuter sur votre ordinateur à la maison ensuite, vous avez besoin d'un texte brut
java.policy
fichier dans votre répertoire home. (~/.java.politique pour Unix personnes.) Dans ce fichier, vous aurez type:Après vous enregistrer ce fichier dans votre répertoire home, tous, des applets java sera donné la permission de faire quoi que ce soit. Ça va être comme le SecurityManager n'existe pas, alors essayez d'être un peu prudent. Après vous avez terminé avec le test, je vous recommande de supprimer ce fichier.
OriginalL'auteur 425nesp