java.lang.SecurityException:禁止されているパッケージ名:java



Java Lang Securityexception



preDefineClassメソッドは、最初にクラス名をチェックし、javaが第1レベルのパッケージ名であることを検出してから、セキュリティ例外をスローします。パッケージ名は禁止されています。

コンソールはエラーを報告します:

Connected to the target VM, address: '127.0.0.1:63225', transport: 'socket' java.lang.SecurityException: Prohibited package name: java at java.lang.ClassLoader.preDefineClass(ClassLoader.java:662) at java.lang.ClassLoader.defineClass(ClassLoader.java:761)

Java仮想マシンでは、パッケージ名をJavaで始めることはできません。



画像

原因:

例外情報に従って、トラブルシューティングのためにjava.lang.ClassLoader.preDefineClassを見つけ、次のコードスニペットを見つけます。
画像



preDefineClassメソッドが最初にクラス名をチェックし、Javaが第1レベルのパッケージ名として使用されていることを検出してから、セキュリティ例外(禁止されたパッケージ名)をスローすることがわかります。

このセキュリティ例外は、Javaクラスによってロードされた「親委任モデル」が原因で発生します。親委任モデルでは、親ローディングクラスによってロードされたクラスは、下位ローダーによってロードできません。この例では、トップローダーのBootstrapClassLoaderは、クラスパスパスで定義されたjava。*パッケージのクラスをロードし、java.researchパッケージはBootstrapClassLoaderの下位ローダーのAppClassLoaderによってロードできません。これは、Javaセキュリティメカニズムの悪意のあるコードに対して講じられる保護手段でもあります。

参照リンク :Https://www.iteye.com/blog/idealab-452404