例如,如果我在applet类中使用此代码,请在applet沙箱中运行它
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来获取权限。
发布于 2013-06-14 16:43:38
在小程序的情况下,您作为小程序的开发人员无权授予或撤销权限。它们由执行小程序的计算机上的安全设置和策略确定。小程序的一个要求是由有效且受信任的证书签名。
发布于 2013-06-14 18:22:35
进一步回答@mschenk74:
受信任的小程序可以读取文件,而沙盒小程序则不能(使用或不使用doPrivilieged)。
但是,如果受信任的applet中的方法被JavaScript调用(例如),JVM就不再认为它是受信任的。指出是使用doPrivileged的地方。它有效地告诉JVM‘认为这段代码是可信的,即使被其他东西调用,比如JS’。
不受信任的小程序有一种方法可以将文件写入本地磁盘,但它涉及到使用JNLP API file services。
https://stackoverflow.com/questions/17104038
复制相似问题