Java-applet java.Sicherheit.AccessControlException
Arbeite ich an einer Java-applet, das druckt eine Datei.
Das applet ist "self-signed".
Die print-Funktion:
//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;
}
Bekomme ich diese exception beim Versuch, die Datei zu öffnen:
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>
korrekt zu verwenden:
DocFlavor.INPUT_STREAM.AUTOSENSE
Die Idee zu sein scheint, drucken Sie so viele Dateitypen wie möglich - pdf, docx, jpg, etc.
Wie kann man das lösen Ausnahme?
InformationsquelleAutor V1tOr | 2011-03-26
Du musst angemeldet sein, um einen Kommentar abzugeben.
Fand die Antwort (auf stackoverflow lol :D)!
Wie es aussieht war das problem:
"javascript keine Datei-Zugriffsrechte"
also das applet blockiert wird. wir haben die Verwendung von
doPrivileged
Hier ist meine Umsetzung:
InformationsquelleAutor V1tOr
Dann kam wohl dieser:
da applets keine verbindungen zu websites, anderen als der, den Sie gekommen sind. Nun, das ist furchtbar dumm, weil man denken würde
localhost
ist nicht eine andere website, aber die Java-SecurityManager muss nur einen Blick auf die IP-Adresse. Daher, wenn der browser verbunden ist74.125.224.224
dann das Java-applet muss schließen Sie an diese Adresse—anders als bei der vonlocalhost
, deren Adresse ist127.0.0.1
.Diese wird nur kümmern sich um die Socket-Permission-Fehler. Aber, werden Sie wahrscheinlich etwas anderes, wenn Sie versuchen, Zugriff auf die Benutzer-hardware. In dem Fall, den Sie brauchen, um ein Zertifikat und die Benutzer können wählen, ob oder nicht, führen Sie Ihr applet.
Wenn Sie nur wollen, führen Sie diese auf Ihrem computer zu Hause, dann brauchen Sie eine nur-text -
java.policy
- Datei in Ihrem home-Verzeichnis. (~/.java.policy für Unix-Leute.) In dieser Datei werden Sie geben:Nachdem Sie speichern Sie diese Datei in Ihr home-Verzeichnis alle java-applets gegeben werden, die volle Berechtigung zu laufen—nichts. Es wird wie der SecurityManager existiert nicht, so versuchen Sie ein wenig vorsichtig sein. Nachdem du fertig bist mit testen, würde ich empfehlen, diese Datei zu löschen.
InformationsquelleAutor 425nesp