I have a Java Applet which is digitally signed.
I need to be able to call a function from javascript which writes an xml file into the user folder.
I have got code in the applets init function which creates a sub-folder, creates a file and appends to that file. This runs without error. When the same code is inside a function(below) which is called directly from javascript an Access Control Exception is thrown:
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;
}
}
*note base directory refers to the user home path
Java Console Error java.security.AccessControlException: access denied (java.io.FilePermission C:\Users\Richard\Hytec\AppStore\0d927ab7-74ba-449a-9db4-98e62cd0f53b.txt write)
If you call your applet's methods from JavaScript, the resulting permissions are the intersection of your applet's permissions and the JavaScript bridge's permissions - which means in your case, no permissions to access the local file.
To run the code with your applet's permissions, wrap the critical code in AccessController.doPrivileged(...)
. Of course, first check that this can't do anything malicious, even if called by malicious code.