8009004: Better implementation of RMI connections

Better class handling.

Reviewed-by: alanb, dfuchs, skoivu, jbachorik
This commit is contained in:
Jean-Francois Denise 2013-03-26 09:12:18 +01:00 committed by Jean-Francois Denise
parent ea20eb7d97
commit fb31c370c7
2 changed files with 7 additions and 2 deletions

View File

@ -25,6 +25,8 @@
package com.sun.jmx.remote.util; package com.sun.jmx.remote.util;
import sun.reflect.misc.ReflectUtil;
public class OrderClassLoaders extends ClassLoader { public class OrderClassLoaders extends ClassLoader {
public OrderClassLoaders(ClassLoader cl1, ClassLoader cl2) { public OrderClassLoaders(ClassLoader cl1, ClassLoader cl2) {
super(cl1); super(cl1);
@ -32,9 +34,10 @@ public class OrderClassLoaders extends ClassLoader {
this.cl2 = cl2; this.cl2 = cl2;
} }
protected Class<?> findClass(String name) throws ClassNotFoundException { protected Class<?> loadClass(String name, boolean resolve) throws ClassNotFoundException {
ReflectUtil.checkPackageAccess(name);
try { try {
return super.findClass(name); return super.loadClass(name, resolve);
} catch (ClassNotFoundException cne) { } catch (ClassNotFoundException cne) {
if (cl2 != null) { if (cl2 != null) {
return cl2.loadClass(name); return cl2.loadClass(name);

View File

@ -48,6 +48,7 @@ import javax.management.remote.JMXServerErrorException;
import javax.management.remote.NotificationResult; import javax.management.remote.NotificationResult;
import javax.management.remote.TargetedNotification; import javax.management.remote.TargetedNotification;
import javax.security.auth.Subject; import javax.security.auth.Subject;
import sun.reflect.misc.ReflectUtil;
import static com.sun.jmx.mbeanserver.Util.cast; import static com.sun.jmx.mbeanserver.Util.cast;
import com.sun.jmx.remote.internal.ServerCommunicatorAdmin; import com.sun.jmx.remote.internal.ServerCommunicatorAdmin;
@ -1792,6 +1793,7 @@ public class RMIConnectionImpl implements RMIConnection, Unreferenced {
@Override @Override
protected Class<?> loadClass(String name, boolean resolve) protected Class<?> loadClass(String name, boolean resolve)
throws ClassNotFoundException { throws ClassNotFoundException {
ReflectUtil.checkPackageAccess(name);
try { try {
super.loadClass(name, resolve); super.loadClass(name, resolve);
} catch(Exception e) { } catch(Exception e) {