众所周知,JAVA 的沙箱是有固定边界的域。这种固定的域会限制非本机代码访问敏感资源。但是并非没有办法突破这种限制,可以修改JAVA 的安全规则文件来实现。
安全规则文件通常是文本文件,以.policy 为后缀名称。它有自己的语法格式,可以使用KEYTOOLS 工具来管理。
下面通过一个例子来说明通过修改安全文件是APPLET 达到访问本地文件的例子。
import java.applet.*;
import java.io.FileInputStream;
import java.awt.*;
public class ZApplet extends Applet {
public void paint(Graphics g)
{
try
{
FileInputStream fr = new FileInputStream("d://41.html");
byte[] bt = new byte[fr.available()];
for(int i=0;i<bt.length;i++)
{
bt[i] = (byte)fr.read();
}
g.drawString(new String(bt),10,25);
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
HTML 文件内容如下
<applet name="zApplet" code="ZApplet.class" codebase="." width=800 height=600>
</applet>
运行例子有两种方式:
1.编写POLICY 文件,文件名为readFile.policy ,内容如下:
grant codeBase "file:/F:/Meng_Blog/applets"
{
permission java.io.FilePermission "d://41.html","read";
};
规则文件说明:来自F:/Meng_Blog/applets 目录下的应用可以读取客户端特定路径下的文件.(d://41.html)
通过APPLETVIEWER 命令来执行
appletviewer -J-Djava.security.policy=readFile.policy ZApplet.html
2.另外一种方式,把readFile.policy的文件内容COPY 到你的 %JAVA_HOME%/jre/lib/security/java.policy 文件的后面。然后直接打开 ZApplet.html