2

由于小程序在浏览器中以沙盒模式运行,因此我使用 AccessController.doPrivileged 写入文件。当我在 Eclipse 中运行它时它会写入文件,但当我在浏览器中访问小程序时它不会写入。我错过了什么?这是代码:

public class HelloWorld extends Applet {

    public void paint(Graphics g) {
        AccessController.doPrivileged(new PrivilegedAction<Boolean>() {
            public Boolean run() {
                try {
                    System.out.println(System.getProperty("user.home"));
                    String userHome = System.getProperty("user.home");
                    FileWriter fw = new FileWriter(userHome + File.separator
                            + "test" + File.separator + "area.txt");
                    fw.write("The area is 20m");
                    fw.flush();
                    fw.close();

                } catch (IOException ioe) {
                    System.err.println(ioe);
                }
                return Boolean.TRUE;
            }
        });
    }
}
4

1 回答 1

4

AccessController.doPrivileged不做你想的1

但首先是小程序可以访问本地文件系统的两种(实际)方式。

  • 对小程序进行数字签名,然后在提示时让用户确定该小程序。
  • 在 1.6.0_10+ JRE 中运行的嵌入式小程序也可以访问 JNLP API 的服务,其中包括 JNLP API 文件服务。他们可以在沙盒应用程序中工作。- 他们只是在小程序加载或保存文件时提示用户。当然,使用 JWS 启动的自由浮动小程序可以从 Java 1.2 开始执行相同的操作,但从 1.6.0_10 开始,这些相同的小程序可以保持嵌入状态。请参阅演示。在一个小应用程序中的文件服务。附带完整的源代码,或用于嵌入式小程序的其他小型动画 GIF 制造商。

您可能会注意到我没有在实用方法列表中列出“调整策略文件/设置”。那是因为它实际上并不实用。至少对于部署它们的人控制目标机器的封闭内部网之外的任何东西(并且可以因此安装策略文件以允许小程序信任)。但是在那种情况下,小程序的好处无论如何都会被严重侵蚀。

  1. 它的作用是允许使用不受信任的源(例如 JavaScript)调用已经受信任的小程序。如果添加它确实确实改变了小程序的安全环境,而没有大量的花里胡哨警告最终用户,那将是一个安全漏洞。
于 2013-06-30T09:38:05.920 回答