由于定义了以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
分享到:
相关推荐
实现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 permission"表明这是一个关于软件源代码版权和授权的问题。在IT行业中,源代码是程序设计的基础,包含了程序的逻辑和实现细节。它通常是私有财产,受...
- 如果不存在,则创建一个名为`java`的文件夹:`mkdir java`。 - 将JRE文件移动到`/usr/java`目录下:`mv jre-6u43-linux-x64 /usr/java`。 ##### 2.2 赋予JRE文件执行权限 - **步骤**: - 使用`cd /usr/java`...
:prohibited: 已归档 不再支持 , 是Adobe Experience Manager的替代参考站点。 模组 模板的主要部分是: 核心:包含所有核心功能(例如OSGi服务,侦听器或调度程序)以及与组件相关的Java代码(例如Servlet或请求...
java8 看不到源码Java 规则手册 Java 的基本概念,用于回答有关 Java 工作原理的任何问题,尤其是在求职面试中。 通过组合多个规则,您可以回答许多 Java 问题 本书只适合已经使用过Java的人 随意更正任何规则或建议...
在IT行业中,文本过滤是一项重要的任务,特别是在网络内容管理、社交媒体监控和用户评论审核等领域。本文将深入探讨“违禁词功能匹配规则过滤处理”这一主题,主要关注PHP语言实现违禁词过滤的方法。我们将围绕标题...
而“Japanese_prohibited_button”这部分可能指出了系统中存在一个特定的日文禁止按钮,这表明系统可能涉及到多语言支持,并且在设计上考虑到了不同文化背景的用户界面需求。最后的“Star”可能表示这是一个受欢迎...
`required` 表示属性是必需的,`optional` 表示属性可选,`prohibited` 表示禁止使用该属性。 6. **案例分析**: - **案例1** 展示了如何使用 `ref` 属性引用已定义的全局复合元素,使得 BookList 可以包含 Book ...
"Anti prohibited-words software" 是一个特别的开源项目,旨在帮助用户绕过网络中的禁止词过滤系统,确保信息流通的自由性。这个软件可能采用了各种技术手段,如替换、加密或编码,以使受限词汇在通过审查系统时变...
可以是 `required`(必需)、`optional`(可选)或 `prohibited`(禁止)。 - **约束(Restrictions)**:用于限制数据的有效值范围。例如: ```xml <xs:simpleType name="ageType"> ``` - `...
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 ...
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”。这个问题通常发生在路径层级较深或者文件夹层级过多的情况下,导致安装程序无法正常运行。下面将...
如果您不使用自动发现,请打开您的应用程序配置,然后将服务提供者添加到$providers数组中: 'providers' => [ . . . Propaganistas \ LaravelIntl \ IntlServiceProvider ::class, ], 流明 在bootstrap/app.php ...
而在冬季滑雪场,如“禁止速降”(Downhill Skiing Prohibited)和“禁止雪道中间停留”(Don’t Stop on Ski Slope)则是为了滑雪安全。 综上所述,旅游标准化英文翻译不仅是技术性的语言转换,更是文化和管理理念...
- **Prohibited**:禁止出现在查询结果中的项。 - 示例:`-kiss` 表示结果不能包含单词`kiss`。 - **Optional**:可选的项,即结果可能包含也可能不包含。 - 示例:`kiss` 表示结果可以包含也可以不包含单词`...
java抢票系统源码非常 Uzful 的设置工作流程 前言 Hello world,在这个文件中,我会为你提供工具、约定、软件等方面的建议……; 在团队中采用通用方法。 遵循通用方法可以避免在多个团队成员之间进行协作时浪费时间...
- 名字空间声明的直接定义格式是:`xmlns:<名字空间前缀>=”<名字空间名>”`,因此选项A是正确的。 6. **空标记写法**: - 在XML中,正确的空标记写法是`<书/>`,选项A。 7. **XML Schema与DTD属性声明**: - ...
您可以在[ :prohibited: URL NAME HERE] [ :prohibited: 在此处复制并粘贴网址)。 贡献者 :prohibited: 将链接添加到单独的贡献者页面 :prohibited: 在技术堆栈中使用带有链接的图像的可选示例,请确保更改...