首先,我知道我的問題與in here相同。但這個問題並沒有幫助我。已簽名的Java Applet在從JavaScript調用時給出AccessControlException
我有自我簽名的小程序。
jarsigner -verify sJSApplet.jar
jar verified.
Warning:
This jar contains entries whose signer certificate will expire within six months.
Applet的目的是從LAN機器打開MS Word文檔。 到目前爲止,我已經嘗試開放使用Desktop.open()
和Runtime.exec()
。與AccessController.doPrivileged
和沒有。我總是得到java.security.AccessControlException: access denied
。
我沒有選擇。我還能做什麼?
我無法使用java.policy文件。
HTML
<html>
<head>
<script>
function openFile(command) {
var applet = "<object type='application/x-java-applet' height='100' width='100' name='jsApplet'><param name='code' value='com.avacoda.swing.JSApplet'/><param name='archive' value='sJSApplet.jar' /><param name='mayscript' value='true'/><param name='filePath' value='C:\\note.txt'/>Applet failed to run. No Java plug-in was found.</object>";
var body = document.getElementsByTagName("body")[0];
var div = document.createElement("div");
div.innerHTML = applet;
body.appendChild(div);
}
</script>
</head>
<body>
<a href="#" onclick="openFile('C:/note.txt');">Open file</a>
</body>
</html>
Java代碼:
public class WordApplet extends JApplet {
@Override
public void init() {
openFile(getParameter("filePath"));
};
public void openFile(final String path) {
AccessController.doPrivileged(new PrivilegedAction<Object>() {
@Override
public Object run() {
try {
Runtime.getRuntime().exec("winword " + path);
//Desktop.getDesktop().open(new File(path));
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
});
}
}
完整的堆棧跟蹤
java.security.AccessControlException: access denied (java.io.FilePermission <<ALL FILES>> execute)
at java.security.AccessControlContext.checkPermission(Unknown Source)
at java.security.AccessController.checkPermission(Unknown Source)
at java.lang.SecurityManager.checkPermission(Unknown Source)
at java.lang.SecurityManager.checkExec(Unknown Source)
at java.lang.ProcessBuilder.start(Unknown Source)
at java.lang.Runtime.exec(Unknown Source)
at java.lang.Runtime.exec(Unknown Source)
at java.lang.Runtime.exec(Unknown Source)
at com.test.applet.JSApplet$1.run(JSApplet.java:34)
at java.security.AccessController.doPrivileged(Native Method)
at com.avacoda.swing.JSApplet.openFile(JSApplet.java:29)
at com.avacoda.swing.JSApplet.init(JSApplet.java:25)
at com.sun.deploy.uitoolkit.impl.awt.AWTAppletAdapter.init(Unknown Source)
at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
basic: Applet initialized
顯示完整的堆棧跟蹤請 –
添加堆棧跟蹤 –
請參閱[* Applets可以和不可以執行的操作*](http://docs.oracle.com/javase/tutorial/deployment/applet/security.html)和[示例](http://blog.danieldee.com/2009/07/javascript-and-applet-communication.html)。 – trashgod