classloader问题,请教!!!

snjzb6149
04-08-05 0 177

我定义自己的myclassloader用他来装载下面的类读取文件名为name的内容
public class showfile
{
public String go(String name)throws IOException
{
String s;
String content = "" ;
BufferedReader in;
in = new BufferedReader(new FileReader(name));
while ((s = in.readLine())!=null)
{
content+=s+"\n";
}
return content;
}
}
主函数这样的
public class classloadertest
{
public static void main(String args[]) throws Exception {



URL urls[] = new URL[2];
urls[0] =new URL (url for showfile);

myclassloader x =new myclassloader(urls);
Class c = x.loadClass("showfile");
Object ob = c.newInstance();
Class arg3[] = {(new String()).getClass()};
Method m3 = c.getMethod("go",arg3);
Object myargs2[] = {args[0]};



String s = (String)m3.invoke(ob,myargs2);
System.out.println(s);
System.out.println("over");
}
}

我测试读c:\winzip.log文件,在myclassloader中为showfile类增加读取c:\winzip.log文件的权限,其他的权限都不要,代码如下
class myclassloader extends URLClassLoader
{
public myclassloader(URL[] arg0)
{
super(arg0);
}

protected PermissionCollection getPermissions(CodeSource codesource)
{

PermissionCollection pc = new Permissions() ;
pc.add(new java.io.FilePermission("c:\\winzip.log","read"));
return(pc);
}
}

运行程序的脚本是
java -Djava.security.manager -Djava.security.policy=D:\policy.all classloadertest c:\winzip.log

测试的结果是:
1 如果在policy.all文件中有读取文件c:\winzip.log的权限,程序可以顺利运行
2 如果在policy.all文件中没有读取文件c:\winzip.log的权限,则报告异常说没有读权限,但是我不是已经在getPermissions中增加了这个权限了吗????参考书上不是说在这个函数中可以覆盖掉默认的权限(策略文件中的)而增加或删除自己的权限吗???请问这是为什么????我应该怎么样实现给某个类动态增加删除权限而忽略策略文件中的权限呢????谢谢大家赐教!!!!