2013-06-20 42 views
1

我們有一些本機C++代碼,它啓動一個JVM,然後使用JNI調用來創建一個URLClassLoader。然後它使用該類加載器加載一個類並在其上調用靜態方法。Java 7 update 25不允許安裝安全管理器的類加載?

從Java 7更新25開始,如果我們安裝了安全管理器(在命令行上使用-Djava.security.manager),那麼該類加載器始終會拋出一個ClassNotFoundException。如果我們在命令行上省略了-Djava.security.manager,一切都很好。

我試過修改java安全策略,將java.security.AllPermission授予所有代碼,但這沒有幫助。任何其他想法?

+0

您可以在Java控制檯中啓用完整的調試信息,並且可能會顯示一些日誌消息,以幫助您找出問題所在。 –

+0

Java控制檯不會顯示給我。我不知道如何在從JNI啓動JVM時將其打開。 –

回答

0

也許這個信息將幫助你找到一個解決方案:

的發行說明7u25狀態:

java.security.AccessController.doPrivileged(的PrivilegedAction, 的AccessControlContext)的實施和 AccessController.doPrivileged(PrivilegedExceptionAction, AccessControlContext)已被修改以提高安全性。

具體來說,如果安裝了安全管理,不是由系統代碼創建的 的AccessControlContext和調用者的 的ProtectionDomain還沒有被授予 (java.security.SecurityPermission)createAccessControlContext,然後 是執行操作的安全權限沒有權限。

請參閱URLClassLoader中的「findClass」方法。請注意,它在AccessControl.doPrivileged塊內搜索一個類。

希望這會有所幫助,我正在努力解決類似的問題。

問候。