我有一个经过数字签名的Java Applet 我需要能够从javascript调用一个函数,该函数将xml文件写入用户文件夹。
我在applet init函数中有代码,它创建一个子文件夹,创建一个文件并附加到该文件。这运行没有错误。 当相同的代码位于直接从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;
}
}
* note基本目录是指用户主路径
Java控制台错误 java.security.AccessControlException:拒绝访问(java.io.FilePermission C:\ Users \ Richard \ Hytec \ AppStore \ 0d927ab7-74ba-449a-9db4-98e62cd0f53b.txt write)
答案 0 :(得分:2)
如果您从JavaScript调用applet的方法,则生成的权限是您的applet的权限和JavaScript桥的权限的交集 - 这意味着在您的情况下,没有访问本地文件的权限。
要使用您的applet的权限运行代码,请将关键代码包装在AccessController.doPrivileged(...)
中。当然,首先检查一下,即使被恶意代码调用,也不能做任何恶意行为。
答案 1 :(得分:0)
首先确保使用适当的权限设置policy
文件。您可以将其设置为all-permissions
进行调试,并确保这不是您的问题。
您遇到此问题的操作系统是什么?您是否在XP中遇到同样的问题?我问的原因是,即使是已签名的具有策略文件授予的完全权限的小程序,在运行Windows Vista或Windows 7的工作站上也没有完整的文件访问权限。
这是因为即使关闭了UAC,文件夹完整性级别的概念,http://msdn.microsoft.com/en-us/library/bb625962.aspx
默认本地小应用程序存储区具有设置为一个完整性级别Low
,这意味着它是固有地不受信任并处理来自这些directorys运行只能对文件和进程在其它Low
完整性运行完全权限directorys。系统文件夹的完整性为High
,其他文件夹默认为Medium
完整性。
这些都可以幸运的改变,有一个免费的命令行工具,它可以帮助你改变一个文件夹的完整性级别,而无需使用控制面板管理工具。 http://www.minasi.com/apps/
希望这一切都有所帮助。