由于定义了以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...
:prohibited: 已归档 不再支持 , 是Adobe Experience Manager的替代参考站点。 模组 模板的主要部分是: 核心:包含所有核心功能(例如OSGi服务,侦听器或调度程序)以及与组件相关的Java代码(例如Servlet或请求...
java8 看不到源码Java 规则手册 Java 的基本概念,用于回答有关 Java 工作原理的任何问题,尤其是在求职面试中。 通过组合多个规则,您可以回答许多 Java 问题 本书只适合已经使用过Java的人 随意更正任何规则或建议...
source code is strictly prohibited without written permission.
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 ...
This software and related documentation are provided under a license ... Reverse engineering, disassembly, or decompilation of this software, unless required by law for interoperability, is prohibited.
如果您不使用自动发现,请打开您的应用程序配置,然后将服务提供者添加到$providers数组中: 'providers' => [ . . . Propaganistas \ LaravelIntl \ IntlServiceProvider ::class, ], 流明 在bootstrap/app.php ...
安装提示folder depth is too large to run the setup
java抢票系统源码非常 Uzful 的设置工作流程 前言 Hello world,在这个文件中,我会为你提供工具、约定、软件等方面的建议……; 在团队中采用通用方法。 遵循通用方法可以避免在多个团队成员之间进行协作时浪费时间...
您可以在[ :prohibited: URL NAME HERE] [ :prohibited: 在此处复制并粘贴网址)。 贡献者 :prohibited: 将链接添加到单独的贡献者页面 :prohibited: 在技术堆栈中使用带有链接的图像的可选示例,请确保更改...
:package: 使用零配置而不是Webpack的包裹 :prohibited: 没有弹出,因为它已经很小 :prohibited: 不掉毛 :prohibited: 没有服务人员 :high_voltage: npm start和npm run build用于开发服务器和生产构建的npm ...
您可以在[ :prohibited: URL NAME HERE] :prohibited: 在此处复制并粘贴网址)。 贡献者 :prohibited: 在下面添加贡献者信息,确保添加图像并编辑每个成员的社交链接。 根据需要添加或删除这些占位符 :prohibited:...
您可以在[ :prohibited: URL NAME HERE] :prohibited: 在此处复制并粘贴网址)。 贡献者 :prohibited: 在下面添加贡献者信息,确保添加图像并编辑每个成员的社交链接。 根据需要添加或删除这些占位符 :prohibited:...
您可以在[ :prohibited: URL NAME HERE] :prohibited: 在此处复制并粘贴网址)。 :keycap_5: 贡献者 :prohibited: 在下面添加贡献者信息,确保添加图像并编辑每个成员的社交链接。 根据需要添加或删除这些占位符 ...
您可以在[ :prohibited: URL NAME HERE] :prohibited: 在此处复制并粘贴网址)。 :keycap_5: 贡献者 :prohibited: 在下面添加贡献者信息,确保添加图像并编辑每个成员的社交链接。 根据需要添加或删除这些占位符 ...
:prohibited: :pile_of_poo: 皮棉阶段 针对暂存的git文件运行linters,不要让 :pile_of_poo: 进入您的代码库! 为什么 在提交代码之前运行时,linting更有意义。 这样,您可以确保没有错误进入存储库并强制执行代码...
快速入门指南{#quickstart} 首先,请确保您已安装以下组件: Java开发工具包(JDK)进行编译。 ParkBench是在JDK的版本7上开发和测试的,但通常应从版本6开始运行。 使编译和构建过程自动化从下载AntRun模板或使用...
如果组中的所有规则均成立,则该组与请求匹配,并且访问被拒绝或上载被阻止。 规则标准的范围从IP地址,模仿类型和请求时间到组成员身份,标签,用户代理等。 一个示例是拒绝访问“人力资源”组所拥有的MS Excel / ...
DSWDF:地府管理系统:Japanese_prohibited_button:Star