`
idealab
  • 浏览: 197774 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

Java中禁止的包名(Prohibited package name)

    博客分类:
  • Java
阅读更多
由于定义了以java开始的包(java.mypackage),编译时错误:
java.lang.SecurityException: Prohibited package name: java.mypackage
	at java.lang.ClassLoader.preDefineClass(ClassLoader.java:479)
	at java.lang.ClassLoader.defineClass(ClassLoader.java:614)
	at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124)
	at java.net.URLClassLoader.defineClass(URLClassLoader.java:260)
	at java.net.URLClassLoader.access$000(URLClassLoader.java:56)
	at java.net.URLClassLoader$1.run(URLClassLoader.java:195)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:276)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
	at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
Exception in thread "main"


根据异常信息,定位到java.lang.ClassLoader.preDefineClass进行排查,发现以下代码片断:
/* Determine protection domain, and check that:
        - not define java.* class,
        - signer of this class matches signers for the rest of the classes in package.
*/
    private ProtectionDomain preDefineClass(String name,
	ProtectionDomain protectionDomain)
    {
	if (!checkName(name))
	    throw new NoClassDefFoundError("IllegalName: " + name);
	if ((name != null) && [color=red]name.startsWith("java.")[/color]) {
	    throw new SecurityException("Prohibited package name: " +
			name.substring(0, name.lastIndexOf('.')));
	}
	if (protectionDomain == null) {
	    protectionDomain = getDefaultDomain();
	}

	if (name != null)
	    checkCerts(name, protectionDomain.getCodeSource());

	return protectionDomain;
    }

......

// true if the name is null or has the potential to be a valid binary name
    private boolean checkName(String name) {
	if ((name == null) || (name.length() == 0))
   	    return true;
	if ((name.indexOf('/') != -1)
	    || (!VM.allowArraySyntax() && (name.charAt(0) == '[')))
   	    return false;
 	return true;
    }


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

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

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

4
0
分享到:
评论
2 楼 skygege20 2015-07-24  
2015-7-24 16:09:14 org.apache.catalina.core.StandardContext listenerStart
严重: Exception sending context initialized event to listener instance of class org.tv189.core.web.ContextLoaderListener
java.lang.NoClassDefFoundError: IllegalName: com.tv189.elip/ax/user/service/dao/AXUserAnswerCalcDao
at java.lang.ClassLoader.preDefineClass(ClassLoader.java:476)
at java.lang.ClassLoader.defineClassCond(ClassLoader.java:625)
at java.lang.ClassLoader.defineClass(ClassLoader.java:615)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
1 楼 skygege20 2015-07-24  
那怎么解决这种问题呢?

相关推荐

    chart java applet

    实现delphi中TChart一样的图表 RChart is java class library (and applet) that will add charts to your java application or web site. In order to run the example application unzip the file .zip and read...

    source code is strictly prohibited without written permissio

    标题中的"source code is strictly prohibited without written permission"表明这是一个关于软件源代码版权和授权的问题。在IT行业中,源代码是程序设计的基础,包含了程序的逻辑和实现细节。它通常是私有财产,受...

    linux下java和tomcat配置 非常详细 适合菜鸟)

    - 如果不存在,则创建一个名为`java`的文件夹:`mkdir java`。 - 将JRE文件移动到`/usr/java`目录下:`mv jre-6u43-linux-x64 /usr/java`。 ##### 2.2 赋予JRE文件执行权限 - **步骤**: - 使用`cd /usr/java`...

    aem-sample-we-retail::prohibited:We.Retail已存档,请参阅《 WKND指南》:

    :prohibited: 已归档 不再支持 , 是Adobe Experience Manager的替代参考站点。 模组 模板的主要部分是: 核心:包含所有核心功能(例如OSGi服务,侦听器或调度程序)以及与组件相关的Java代码(例如Servlet或请求...

    java8看不到源码-Java-Rule-Book:Java的基本概念来回答有关Java工作原理的任何问题

    java8 看不到源码Java 规则手册 Java 的基本概念,用于回答有关 Java 工作原理的任何问题,尤其是在求职面试中。 通过组合多个规则,您可以回答许多 Java 问题 本书只适合已经使用过Java的人 随意更正任何规则或建议...

    DSWDF:地府管理系统:Japanese_prohibited_button:Star

    而“Japanese_prohibited_button”这部分可能指出了系统中存在一个特定的日文禁止按钮,这表明系统可能涉及到多语言支持,并且在设计上考虑到了不同文化背景的用户界面需求。最后的“Star”可能表示这是一个受欢迎...

    XML应用开发(软件品牌)-1期 3.8 案例分析-复杂类型-复合元素ref引用与属性定义.doc

    `required` 表示属性是必需的,`optional` 表示属性可选,`prohibited` 表示禁止使用该属性。 6. **案例分析**: - **案例1** 展示了如何使用 `ref` 属性引用已定义的全局复合元素,使得 BookList 可以包含 Book ...

    Anti prohibited-words software-开源

    "Anti prohibited-words software" 是一个特别的开源项目,旨在帮助用户绕过网络中的禁止词过滤系统,确保信息流通的自由性。这个软件可能采用了各种技术手段,如替换、加密或编码,以使受限词汇在通过审查系统时变...

    XML学习笔记

    可以是 `required`(必需)、`optional`(可选)或 `prohibited`(禁止)。 - **约束(Restrictions)**:用于限制数据的有效值范围。例如: ```xml <xs:simpleType name="ageType"> ``` - `...

    java版qq餐厅源码-Top-Review-Code:GitHub中的热门Diff项目

    java版qq餐厅源码 Top Review Code Github repositories Based on Here is a list of the top-200 Review Code Github repositories sorted by the number of stars. The query that has been used for the GitHub ...

    javamail 邮件服务

    JavaBeans, JavaServer Pages, JavaServer Faces, JDBC and Java API for XML Registries are trademarks or registered trademarks of Sun Microsystems, Inc. in the U.S. and other countries. This product is ...

    安装提示folder depth is too large to run the setup

    在进行软件或应用程序安装过程中,有时会遇到一个令人头疼的问题:“folder depth is too large to run the setup”。这个问题通常发生在路径层级较深或者文件夹层级过多的情况下,导致安装程序无法正常运行。下面将...

    Laravel-Intl::prohibited:[已弃用] Laravel 5易于使用的国际化本地化功能

    如果您不使用自动发现,请打开您的应用程序配置,然后将服务提供者添加到$providers数组中: 'providers' => [ . . . Propaganistas \ LaravelIntl \ IntlServiceProvider ::class, ], 流明 在bootstrap/app.php ...

    旅游标准化英文翻译第一部分.doc

    而在冬季滑雪场,如“禁止速降”(Downhill Skiing Prohibited)和“禁止雪道中间停留”(Don’t Stop on Ski Slope)则是为了滑雪安全。 综上所述,旅游标准化英文翻译不仅是技术性的语言转换,更是文化和管理理念...

    solr查询语法

    - **Prohibited**:禁止出现在查询结果中的项。 - 示例:`-kiss` 表示结果不能包含单词`kiss`。 - **Optional**:可选的项,即结果可能包含也可能不包含。 - 示例:`kiss` 表示结果可以包含也可以不包含单词`...

    java抢票系统源码-workflow-dev:围绕工作流程、技术和开发工具的文档和反思,供实验室团队使用,最终更广泛地适用于Uzful机构的

    java抢票系统源码非常 Uzful 的设置工作流程 前言 Hello world,在这个文件中,我会为你提供工具、约定、软件等方面的建议……; 在团队中采用通用方法。 遵循通用方法可以避免在多个团队成员之间进行协作时浪费时间...

    XML_试题推荐

    - 名字空间声明的直接定义格式是:`xmlns:<名字空间前缀>=”<名字空间名>”`,因此选项A是正确的。 6. **空标记写法**: - 在XML中,正确的空标记写法是`<书/>`,选项A。 7. **XML Schema与DTD属性声明**: - ...

    marketplace-be

    您可以在[ :prohibited: URL NAME HERE] [ :prohibited: 在此处复制并粘贴网址)。 贡献者 :prohibited: 将链接添加到单独的贡献者页面 :prohibited: 在技​​术堆栈中使用带有链接的图像的可选示例,请确保更改...

    违禁词功能匹配规则过滤处理

    在IT行业中,文本过滤是一项重要的任务,特别是在网络内容管理、社交媒体监控和用户评论审核等领域。本文将深入探讨“违禁词功能匹配规则过滤处理”这一主题,主要关注PHP语言实现违禁词过滤的方法。我们将围绕标题...

Global site tag (gtag.js) - Google Analytics