package com.rundasoft.client;import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.ObjectInputStream;
import java.security.interfaces.RSAPublicKey;
import com.rundasoft.util.*;public class MyClassLoader extends ClassLoader{

@Override
public synchronized Class<?> loadClass(String name, boolean resolve) throws ClassNotFoundException {
// TODO Auto-generated method stub
Class c=null;
        c=this.findLoadedClass(name);
        
        if(c!=null){
         return c;
        }
        
        
//      下面是定制部分
        
        RSAPublicKey ipubKey = null;
        //读取密钥
           FileInputStream f;
try {
f = new FileInputStream("f:\\pubKey.dat");
ObjectInputStream b=new ObjectInputStream(f);        
ipubKey=(RSAPublicKey)b.readObject( );
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//读取文件
File src = new File("f:\\Aclass.class");
FileInputStream in;
byte[] keytmpbuf = new byte[2048];
try {
in = new FileInputStream(src);
BufferedInputStream bufferedInputStream=new BufferedInputStream(in);
    int r = bufferedInputStream.read( keytmpbuf ); } catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("sasasasasa"+keytmpbuf.length);
//解密

byte[] data = null;
try {
data = RSAUtil.decrypt(ipubKey, keytmpbuf);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
;


        byte classData[] = data;/* 通过某种方法获取字节码数据 */;
        System.out .println(classData.toString());
        if (classData != null) {
          // 成功读取字节码数据,现在把它转换成一个Class对象
          c = defineClass( name, classData, 0, classData.length );
          
        }        // 必需的步骤2:如果上面没有成功,
        // 我们尝试用默认的ClassLoader装入它
        if (c == null)
          c = findSystemClass( name );        // 必需的步骤3:如有必要,则装入相关的类
        if (resolve && c != null)
          resolveClass( c );        // 把类返回给调用者
        
        return c;

}       


}
package com.rundasoft.client;public class T { /**
 * @param args
 */
public static void main(String[] args) {
// TODO Auto-generated method stub
Test te=new Test();
te.doGet();
MyClassLoader myl=new MyClassLoader();
//Class cl=myl.loadClass();
try {
Class cl=myl.loadClass("com.rudasoft.a.Aclass", false);
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}}
错误信息:
java.lang.SecurityException: Prohibited package name: java.lang
at java.lang.ClassLoader.preDefineClass(ClassLoader.java:479)
at java.lang.ClassLoader.defineClass(ClassLoader.java:614)
at java.lang.ClassLoader.defineClass(ClassLoader.java:465)
at com.rundasoft.util.MyClassLoader.loadClass(MyClassLoader.java:81)
at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:620)
at java.lang.ClassLoader.defineClass(ClassLoader.java:465)
at com.rundasoft.util.MyClassLoader.loadClass(MyClassLoader.java:81)
at com.rundasoft.servlet.ClientInfo.doGet(ClientInfo.java:136)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:263)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:584)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Thread.java:595) 请大侠指教,小弟先谢了!