0

例如,如果我在小程序类中使用此代码,则在小程序沙箱中运行它

public void init() {
    try {
        class doInit implements PrivilegedExceptionAction {

            public Object run() throws Exception{
                File file = new File("/tmp/1.txt");
                FileOutputStream fos = null;

                fos = new FileOutputStream(file);
                fos.write("hello world2".getBytes());
                fos.close();
                return null;
            }
        }
        ;
        doInit di = new doInit();
        AccessController.doPrivileged(di);

我知道它会失败并引发安全异常。但为什么?

File并且FileOutputStream 在核心java API中,但我无法通过使用获得许可 doPrivileged

4

2 回答 2

1

除了@mschenk74 的回答:

受信任的小程序可以读取文件,而沙盒小程序不能(有或没有doPrivilieged)。

但是如果一个受信任的小程序中的一个方法被 JavaScript 调用(例如),JVM 就不再认为它是受信任的。 就是doPrivileged使用的地方。它有效地对 JVM 说“考虑这个代码是可信的,即使是被 JS 之类的其他东西调用”。

不受信任的小程序有一种方法可以将文件写入本地磁盘,但它涉及使用JNLP API 文件服务

于 2013-06-14T10:22:34.797 回答
1

在 Applet 的情况下,您作为 Applet 的开发者不是有权授予或撤销权限的人。它们由执行小程序的机器上的安全设置和策略决定。对小程序的一项要求是由有效且受信任的证书签名。

于 2013-06-14T08:43:38.047 回答