瀏覽代碼

Class.gerDeclaredMethod() needs to happen in a privileged block


git-svn-id: http://anonsvn.jboss.org/repos/javassist/trunk@311 30ef5769-5b8d-40dd-aea6-55b5d6557bb3
tags/rel_3_17_1_ga
kkhan 18 年之前
父節點
當前提交
81ef701676
共有 1 個文件被更改,包括 18 次插入10 次删除
  1. 18
    10
      src/main/javassist/ClassPool.java

+ 18
- 10
src/main/javassist/ClassPool.java 查看文件

@@ -21,6 +21,9 @@ import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URL;
import java.security.AccessController;
import java.security.PrivilegedActionException;
import java.security.PrivilegedExceptionAction;
import java.security.ProtectionDomain;
import java.util.Hashtable;
import java.util.Iterator;
@@ -67,17 +70,22 @@ public class ClassPool {

static {
try {
Class cl = Class.forName("java.lang.ClassLoader");
defineClass1 = cl.getDeclaredMethod("defineClass",
new Class[] { String.class, byte[].class,
int.class, int.class });

defineClass2 = cl.getDeclaredMethod("defineClass",
new Class[] { String.class, byte[].class,
int.class, int.class, ProtectionDomain.class });
AccessController.doPrivileged(new PrivilegedExceptionAction(){
public Object run() throws Exception{
Class cl = Class.forName("java.lang.ClassLoader");
defineClass1 = cl.getDeclaredMethod("defineClass",
new Class[] { String.class, byte[].class,
int.class, int.class });

defineClass2 = cl.getDeclaredMethod("defineClass",
new Class[] { String.class, byte[].class,
int.class, int.class, ProtectionDomain.class });
return null;
}
});
}
catch (Exception e) {
throw new RuntimeException("cannot initialize ClassPool");
catch (PrivilegedActionException pae) {
throw new RuntimeException("cannot initialize ClassPool", pae.getException());
}
}


Loading…
取消
儲存