我有一个小 Java Applet,但我遇到了一个烦人的问题。我已经使用 jarsigner 工具(按照这些说明)用我自己的密钥库签署了我的 JAR 。
Java Applet 下载一个签名的 JAR 并尝试使用URLClassLoader的扩展类来启动它。这个 JAR 尝试执行这行代码:
ClassLoader.getSystemClassLoader().getResource("aResource");
它失败并通过以下方式完成大型堆栈跟踪:
Caused by: java.security.AccessControlException: access denied ("java.lang.RuntimePermission" "getClassLoader")
at java.security.AccessControlContext.checkPermission(AccessControlContext.java:366)
at java.security.AccessController.checkPermission(AccessController.java:555)
at java.lang.SecurityManager.checkPermission(SecurityManager.java:549)
at java.lang.ClassLoader.getSystemClassLoader(ClassLoader.java:1476)
at test.SecondJAR.main(SecondJAR.java:8)
(test.SecondJAR第8行对应getResource(...)
方法
启动 Java Applet 时,如果用户信任发布者,则会提示用户接受证书:
即使我接受它,也发生了异常。即使我安装了证书,提示信息被自动接受了,还是出现了异常。
我也试过这个:
AccessController.doPrivileged(new PrivilegedAction<Object>() {
public Object run() {
ClassLoader.getSystemClassLoader().getResource("aResource");
return null;
}
});
它失败了,同样的例外。
任何帮助,将不胜感激!