在将文件写入本地系统时,签名的Java小程序会导致AccessControlException

时间:2011-07-12 11:29:51

标签: java applet signed-applet

我有一个经过数字签名的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)

2 个答案:

答案 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/

希望这一切都有所帮助。

相关问题