1

我们有一些本机 C++ 代码启动 JVM,然后使用 JNI 调用创建一个URLClassLoader. 然后它使用该类加载器来加载一个类并在其上调用一个静态方法。

从 Java 7 更新 25 开始,如果我们安装了安全管理器(-Djava.security.manager在命令行上使用),则该类加载器总是会抛出ClassNotFoundException. 如果我们在命令行中省略-Djava.security.manager,一切都很好。

我尝试修改 java 安全策略以授予java.security.AllPermission所有代码,但这无济于事。还有其他想法吗?

4

1 回答 1

0

也许这些信息会帮助您找到解决方案:

7u25 的发行说明指出:

修改了 java.security.AccessController.doPrivileged(PrivilegedAction, AccessControlContext) 和 AccessController.doPrivileged(PrivilegedExceptionAction, AccessControlContext) 的实现以提高安全性。

具体来说,如果安装了安全管理器,AccessControlContext不是由系统代码创建的,并且调用者的ProtectionDomain没有被授予安全权限(java.security.SecurityPermission)createAccessControlContext,那么该操作是在没有权限的情况下执行的。

请参阅 URLClassLoader 中的方法“findClass”。请注意,它在 AccessControl.doPrivileged 块中搜索一个类。

希望这会有所帮助,我自己也在努力解决类似的问题。

问候。

于 2013-08-11T14:15:41.023 回答