Signiertes Applet gibt AccessControlException: Zugriff verweigert, wenn aus Javascript angerufen wird
Ich habe ein einfaches selbstsigniertes Applet (fertig mit keytool und dem jarsigner):
public class NetAppletLauncher extends JApplet {
private static final long serialVersionUID = 1L;
public void init() {
exec("notepad c:/hello.txt");
}
public void exec(String command) {
try {
// launch EXE and grab stdin/stdout and stderr
Process process = Runtime.getRuntime().exec(command);
// OutputStream stdin = process.getOutputStream();
InputStream stderr = process.getErrorStream();
InputStream stdout = process.getInputStream();
// "write" the parms into stdin
// stdin.write(arguments.getBytes());
// stdin.flush();
// stdin.close();
// clean up if any output in stdout
String line = "";
BufferedReader brCleanUp = new BufferedReader(new InputStreamReader(stdout));
while ((line = brCleanUp.readLine()) != null) {
//System.out.println ("[Stdout] " + line);
}
brCleanUp.close();
// clean up if any output in stderr
brCleanUp = new BufferedReader(new InputStreamReader(stderr));
while ((line = brCleanUp.readLine()) != null) {
//System.out.println ("[Stderr] " + line);
}
brCleanUp.close();
} catch (Exception exception) {
exception.printStackTrace();
}
}
}
Grundsätzlich führt es 'notepad c: /hello.txt' aus.
Dann binde ich das Applet in HTML ein:
<applet id='applet' name='applet' archive='NetAppletLauncher1.jar' code='src.NetAppletLauncher' width='100' height='100' MAYSCRIPT ></applet>
Wenn ich die Seite besuche, startet JRE und fragt mich, ob ich dieses Applet starten möchte und ob ich ihm vertraue. Ich drücke ok Dann startet der Notizblock - wie er sollte. Kein Problem hier.
Aber dann füge ich das in die HTML-Seite ein:
<p class="link" onclick="document.applet.exec('calc');">remote desktop2</p>
Wenn ich nun auf diesen Text drücke, sollte calc starten - richtig? Aber das gibt mir:
java.security.AccessControlException: access denied (java.io.FilePermission <<ALL FILES>> execute)
at java.security.AccessControlContext.checkPermission(Unknown Source)
was ist damit los? Warum erhalte ich jetzt eine Sicherheitsausnahme, aber es kann sein, dass der Editor zuvor gestartet wird?