我有一個數字簽名的Java Applet。
我需要能夠從javascript調用一個函數,將xml文件寫入用戶文件夾。已簽名的Java小應用程序在將文件寫入本地系統時導致AccessControlException
我已經在applets初始化函數中創建一個子文件夾,創建一個文件並附加到該文件中的代碼。這運行沒有錯誤。 當相同的代碼是一個函數(見下文),其直接調用從JavaScript訪問控制拋出異常內:
public boolean createLocalXMLFile(String XML) {
String path = BaseDirectory.baseDirectory + "\\TestFolder";
try {
boolean status;
status = new File(path).mkdir();
UUID fName = UUID.randomUUID();
FileWriter fstream = new FileWriter(path + "\\"+fName+".xml");
BufferedWriter out = new BufferedWriter(fstream);
out.write(XML);
//Close the output stream
out.close();
return true;
}catch (Exception ex) {
System.out.println("createXMLError \n"+ex.toString());
return false;
}
}
*註釋基目錄是指用戶本地路徑
Java控制檯錯誤 java.security.AccessControlException:訪問被拒絕(java.io.FilePermission中的C:\用戶\理查德\ HYTEC \ AppStore的\ 0d927ab7-74ba-449A-9db4-98e62cd0f53b.txt寫)
感謝您的迴應,儘管已簽名的applet能夠在init函數內執行相同的操作。我正在使用win 7,ie9,並嘗試使用chrome和xp以及相同的響應。更新策略文件不適用於將使用該應用程序的環境 –
我覺得你在'init()'函數中擁有權限而在其他地方沒有權利,這讓我覺得很奇怪。這篇文章總結了關於政策文件和Java小程序的嚴峻形勢,http://www.velocityreviews.com/forums/t542064-distributing-java-policy-with-applet-jar.html –
假設你說的是正確的,你能創建一個在init方法中每5秒喚醒一次的線程並檢查一個全局布爾變量來執行某種文件IO操作嗎?我知道這聽起來像是黑客,但它可能工作。 –