`

java.lang.SecurityException: Prohibited package name

    博客分类:
  • Java
阅读更多

问题 java.lang.SecurityException: Prohibited package name: java.edu.ynu.app,也就是运行包java.edu.ynu.app里的一个类,但是就产生这个错误。

解决办法:包路径里不能以java开头。改成domain.edu.ynu.app就可以了。

 

 

由于定义了以java开始的包(java.mypackage),编译时错误: 

Java代码 
  1. java.lang.SecurityException: Prohibited package name: java.mypackage  
  2.     at java.lang.ClassLoader.preDefineClass(ClassLoader.java:479)  
  3.     at java.lang.ClassLoader.defineClass(ClassLoader.java:614)  
  4.     at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124)  
  5.     at java.net.URLClassLoader.defineClass(URLClassLoader.java:260)  
  6.     at java.net.URLClassLoader.access$000(URLClassLoader.java:56)  
  7.     at java.net.URLClassLoader$1.run(URLClassLoader.java:195)  
  8.     at java.security.AccessController.doPrivileged(Native Method)  
  9.     at java.net.URLClassLoader.findClass(URLClassLoader.java:188)  
  10.     at java.lang.ClassLoader.loadClass(ClassLoader.java:306)  
  11.     at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:276)  
  12.     at java.lang.ClassLoader.loadClass(ClassLoader.java:251)  
  13.     at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)  
  14. Exception in thread "main"  


根据异常信息,定位到java.lang.ClassLoader.preDefineClass进行排查,发现以下代码片断: 
Java代码 
  1. /* Determine protection domain, and check that: 
  2.         - not define java.* class, 
  3.         - signer of this class matches signers for the rest of the classes in package. 
  4. */  
  5.     private ProtectionDomain preDefineClass(String name,  
  6.     ProtectionDomain protectionDomain)  
  7.     {  
  8.     if (!checkName(name))  
  9.         throw new NoClassDefFoundError("IllegalName: " + name);  
  10.     if ((name != null) && [color=red]name.startsWith("java.")[/color]) {  
  11.         throw new SecurityException("Prohibited package name: " +  
  12.             name.substring(0, name.lastIndexOf('.')));  
  13.     }  
  14.     if (protectionDomain == null) {  
  15.         protectionDomain = getDefaultDomain();  
  16.     }  
  17.   
  18.     if (name != null)  
  19.         checkCerts(name, protectionDomain.getCodeSource());  
  20.   
  21.     return protectionDomain;  
  22.     }  
  23.   
  24. ......  
  25.   
  26. // true if the name is null or has the potential to be a valid binary name  
  27.     private boolean checkName(String name) {  
  28.     if ((name == null) || (name.length() == 0))  
  29.         return true;  
  30.     if ((name.indexOf('/') != -1)  
  31.         || (!VM.allowArraySyntax() && (name.charAt(0) == '[')))  
  32.         return false;  
  33.     return true;  
  34.     }  


可以看出preDefineClass方法首先对类名进行了检查,发现以java作为一级包名,则抛出安全异常:禁止使用的包名! 

这条安全异常是由Java类加载的“双亲委派模型”(详见这里)所导致的。在双亲委派模型中,由父加载类加载的类,下层加载器是不能加载的。本例中最高层加载器BootstrapClassLoader加载了classpath路径下所定义的java.*包内的类,而java.research包就不能由BootstrapClassLoader的下层加载器AppClassLoader加载了。这也是java安全机制中对于恶意代码所采取的防护措施。 

另参见:http://dev.csdn.net/develop/article/45/article/39/39272.shtm 

分享到:
评论

相关推荐

    解决java.lang.SecurityException: JCE cannot authenticate the provider BC问题

    在与银联的对接中,调试过程中报错或使用类似登入加密:java.lang.SecurityException: JCE cannot authenticate the provider BC 进行问题解决,里面包含 bcprov-jdk16-143.jar与bcprov-jdk15-135.jar与具体文件存放...

    jboss7.1.1下报java.lang.SecurityException: JCE cannot authenticate the provider BC

    2. **证书问题**:Java可能无法验证Bouncy Castle的数字签名,这可能是由于缺少或过期的根证书,或者系统的证书存储区配置不正确。 3. **版本冲突**:可能有多个版本的Bouncy Castle或者其他加密提供者在类路径中,...

    bcprov加密库

    org.bouncycastle.openssl.PEMException: problem parsing ENCRYPTED PRIVATE KEY: java.lang.SecurityException: JCE cannot authenticate the provider BC at org.bouncycastle.openssl.PEMReader$...

    Android MediaProjection截屏&录屏-适配Android

    Android Media...1、解决Android Q中java.lang.SecurityException: Media projections require a foreground service of type ServiceInfo.FOREGROUND_SERVICE_TYPE_MEDIA_PROJECTION 异常 2、targetSdk 32可用

    反复重启无法进入桌面log

    05-27 15:35:11.487 E/AndroidRuntime( 2352): java.lang.RuntimeException: Unable to create service com.android.systemui.keyguard.KeyguardService: java.lang.SecurityException: read wallpaper: Neither ...

    system.Security.SecurityException 不受信任

    标题 "system.Security.SecurityException 不受信任" 指的是在编程过程中遇到的一种特定错误,它属于 .NET Framework 的安全异常类型。此异常通常发生在代码尝试执行一个被安全策略禁止的操作时,例如访问受保护的...

    Android Caused by: java.lang.ClassNotFoundException解决办法

    Android Caused by: java.lang.ClassNotFoundException解决办法 出现问题: 08-13 18:29:22.924: E/AndroidRuntime(1875): Caused by: Java.lang.ClassNotFoundException:XXXXX in loader dalvik.system....

    J2ee直接访问数据库步骤

    在J2EE(Java 2 Platform, Enterprise Edition)开发中,直接访问数据库通常是通过Java的JDBC(Java Database Connectivity)API来实现的。下面将详细解释J2EE直接访问数据库的步骤,以及涉及的相关知识点。 **步骤...

    JAVA常见异常解析,面试用

    - **java.lang.SecurityException**:在安全管理器存在且拒绝访问时抛出。 - **java.io.EOFException**:在输入流到达文件结尾时,尝试读取更多数据时抛出。 - **java.io.FileNotFoundException**:打开或创建指定的...

    深入研究java.lang.Runtime类.doc

    "深入研究java.lang.Runtime类" java.lang.Runtime 类是 Java 语言中一个非常重要的类,它提供了访问当前 Java 应用程序的 Runtime 环境的能力。每个 Java 应用程序都有一个 Runtime 类实例,使应用程序能够与其...

    commons-beanutils-1.7.0

    java.lang.SecurityException: class "org.apache.commons.collections.SequencedHashMap"'s signer information does not match signer information of other classes in the same package at java.lang....

    java异常详解

    - **`java.lang.SecurityException`**:当违反安全策略时抛出,例如试图访问受限资源。 - **`java.io.FileNotFoundException`**:当试图打开不存在的文件时抛出。 - **`java.lang.NegativeArraySizeException`**:当...

    Java的异常类

    - **`java.lang.SecurityException`**:违反安全原则异常,例如尝试执行未授权的操作。 - **`java.io.EOFException`**:文件已结束异常。 - **`java.io.FileNotFoundException`**:文件未找到异常。 - **`java....

    常见异常处理方案

    9. **`java.lang.SecurityException`**: 安全管理器阻止了请求的操作。在执行敏感操作(如文件系统访问)时,需要确保有足够的权限。 10. **`java.io.IOException`**: 表示在输入/输出过程中发生了错误。在处理...

    java.lang.SecurityException(解决方案).md

    项目中碰到的,记录一下解决方案

    Java异常大全

    - **`java.lang.SecurityException`**:当安全策略阻止执行某些操作时抛出。 - **`java.io.EOFException`**:当读取文件或流时达到文件末尾但数据还未完全读取完成时抛出。 - **`java.io.FileNotFoundException`**:...

    非intent发送邮件所需jar包

    JavaMail是一个开源的Java库,它提供了与SMTP、POP3、IMAP等邮件协议交互的功能。而Apache Commons Net则提供了一些网络协议的基本实现,包括SMTP。在描述中提到的"经过代码实验"的jar包,很可能是包含了这些功能的...

Global site tag (gtag.js) - Google Analytics