打電話時,我有一個簡單的自簽名的小應用程序(使用keytool和的jarsigner完成):簽名的小給人的AccessControlException:拒絕訪問,從JavaScript
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();
}
}
}
基本上,它做什麼,是它執行'記事本c:/hello.txt'。
然後我嵌入的小程序在HTML:
<applet id='applet' name='applet' archive='NetAppletLauncher1.jar' code='src.NetAppletLauncher' width='100' height='100' MAYSCRIPT ></applet>
當我訪問的頁面,JRE啓動,並問我,如果我要開始這個小程序,如果我信任它。我按OK。然後記事本開始 - 就像它應該。這裏沒問題。
但後來我加入到HTML頁面這樣的:
<p class="link" onclick="document.applet.exec('calc');">remote desktop2</p>
現在,當我按下這個文本,鈣應該開始 - 對嗎?但是,這給了我:
java.security.AccessControlException: access denied (java.io.FilePermission <<ALL FILES>> execute)
at java.security.AccessControlContext.checkPermission(Unknown Source)
- 什麼用這個嗎?爲什麼它現在給我一個安全例外,但它可以在以前開始記事本?
他也可以使用AccessController.doPrivileged API將 javascript函數調用的權限提升爲1簽名的小程序。 http://www.inf.puc-rio.br/~roberto/java/jdk1.2/docs/guide/security/doprivileged.html – 2010-07-04 22:36:39
非常感謝,這解決了我的問題,一個很好,乾淨的方式。 – boxofrats 2010-12-11 01:21:08