在允许用户提交他们自己的代码以供服务器运行的模拟服务器环境中,任何用户提交的代码都可以在沙箱中运行,这与使用Applet在浏览器中不同,这显然是有利的.我希望能够利用JVM本身,而不是添加另一个VM层来隔离这些提交的组件.
使用现有的Java沙箱模型似乎可以实现这种限制,但是有一种动态方法可以仅为正在运行的应用程序的用户提交的部分启用它吗?
我有一个类Formula
,位于包中javaapplication4
,我使用URLClassLoader加载.但是,当我从Test1
位于同一个包中的另一个类调用它时,我无法访问其具有默认访问修饰符的方法(我可以访问公共方法).
我得到以下异常:
java.lang.IllegalAccessException:类javaapplication4.Test1无法使用修饰符""访问类javaapplication4.Formula的成员
如何从同一个包中访问在运行时加载的类的包私有方法?
我想使用不同的类加载器是一个问题,但不确定为什么(我已经设置了URLClassLoader的父级).
SSCCE再现问题(Windows路径) - 我想问题出在loadClass
方法中:
public class Test1 {
private static final Path TEMP_PATH = Paths.get("C:/temp/");
public static void main(String[] args) throws Exception {
String thisPackage = Test1.class.getPackage().getName();
String className = thisPackage + ".Formula"; //javaapplication4.Formula
String body = "package " + thisPackage + "; "
+ "public class Formula { "
+ " double calculateFails() { "
+ " return 123; "
+ " } "
+ " public …
Run Code Online (Sandbox Code Playgroud)