公司要求做加密,于是上网搜啊,都说加密重要的.class,自定义ClassLoader加载加密的class,其实我感觉也没有用,defineClass时还是要解密。但是其间遇到一个问题一直不知道什么原因:
Jdk1.6 Tomcat5.5
自定义的ClassLoader类:MyClassLoader
待解密的类:LicenseUtils
我用MyClassLoader加载LicenseUtils时的代码:
LicenseUtils类中init方法:
这么写是没有问题的,但是如果我在init方法里面调用第三方类(不是系统的类),就会出现ClassNotFoundException,找了半天也不知道什么原因,而且仅仅是在Tomcat里面运行出错,在main方法里面做测试是木有问题的。
我思忖,Java Application 和 Web Application有什么区别呢?
Jdk有三个ClassLoader,利用委派方式加载类,Tomcat定制了自己一系列的ClassLoader来加载类,我自己写
的MyClassLoader继承自Jdk的ClassLoader,Tomcat的WebAppClassLoader继承自URLClassLoader,URLClassLoader又继承自ClassLoader。
查了Apache的Mailing Lists发现有人说Tomcat只能用继承自WebAppClassLoader的ClassLoader
有人遇到过吗?或者看出有什么问题的
Jdk1.6 Tomcat5.5
自定义的ClassLoader类:MyClassLoader
待解密的类:LicenseUtils
我用MyClassLoader加载LicenseUtils时的代码:
Class c = loadClass("xx.LicenseUtils"));
Method m = c.getDeclaredMethod("init", new Class[]{});
m.invoke(c.newInstance(), new Object[]{});
LicenseUtils类中init方法:
public void init() {
System.out.println("init method");
}
这么写是没有问题的,但是如果我在init方法里面调用第三方类(不是系统的类),就会出现ClassNotFoundException,找了半天也不知道什么原因,而且仅仅是在Tomcat里面运行出错,在main方法里面做测试是木有问题的。
public void init() {
//自定义的类 License
com.test.encrypt.License lic = new com.test.encrypt.License();
//如果是第三方的jar包也报错
System.out.println("init method");
}
我思忖,Java Application 和 Web Application有什么区别呢?
Jdk有三个ClassLoader,利用委派方式加载类,Tomcat定制了自己一系列的ClassLoader来加载类,我自己写
的MyClassLoader继承自Jdk的ClassLoader,Tomcat的WebAppClassLoader继承自URLClassLoader,URLClassLoader又继承自ClassLoader。
查了Apache的Mailing Lists发现有人说Tomcat只能用继承自WebAppClassLoader的ClassLoader
有人遇到过吗?或者看出有什么问题的