2

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

}

*注意基目录是指用户主路径

Java 控制台错误 java.security.AccessControlException:访问被拒绝(java.io.FilePermission C:\Users\Richard\Hytec\AppStore\0d927ab7-74ba-449a-9db4-98e62cd0f53b.txt 写入)

4

2 回答 2

2

如果您从 JavaScript 调用您的小程序的方法,则生成的权限是您的小程序权限和 JavaScript 桥的权限的交集 - 这意味着在您的情况下,没有访问本地文件的权限。

要使用您的小程序权限运行代码,请将关键代码包装在AccessController.doPrivileged(...). 当然,首先检查它不能做任何恶意的事情,即使被恶意代码调用。

于 2011-07-12T14:06:27.423 回答
0

首先确保您的policy文件设置了适当的权限。您可以将其设置all-permissions为调试并确保这不是您的问题。

您在什么操作系统上遇到此问题?XP有同样的问题吗?我问的原因是因为即使具有策略文件授予的完全权限的签名小程序在运行 Windows Vista 或 Windows 7 的工作站上也没有完全文件访问权限。

这是因为即使关闭 UAC,文件夹完整性级别的概念, http: //msdn.microsoft.com/en-us/library/bb625962.aspx

默认情况下,本地小程序存储区设置了一个完整性级别,Low这意味着它本质上是不受信任的,并且从这些目录运行的进程只能对在其他Low完整性目录中运行的文件和进程具有完全权限。默认情况下,系统文件夹具有High完整性,其他文件夹具有Medium完整性。

幸运的是,这些都可以更改,并且有一个免费的命令行工具可以帮助您更改文件夹完整性级别,而无需使用控制面板管理工具。 http://www.minasi.com/apps/

希望这一切都有帮助。

于 2011-07-12T11:44:43.223 回答