无法获得运行时允许java.util中的类

时间:2014-05-28 18:42:48

标签: java securitymanager

我最近想创建自己的GregorianCalendar副本,添加一些System.out.println来帮助我了解它的工作原理。我复制了源并重命名了该类,但由于源引用了其他类中的包私有名称,因此无法编译。所以我尝试将package java.util;添加到源代码并将其放在我的工作目录的java\util子目录中。我得到了编译的程序,但它正在抛出java.lang.SecurityException: Prohibited package name: java.util

在阅读有关安全性的教程后,我尝试运行policytool以允许自己在java.util中定义一个类。我现在有一个文件policy1,如下所示:

grant {
  permission java.lang.RuntimePermission "defineClassInPackage.java.util";
};

(加上不要编辑评论)。这是在我的工作目录中,与我的测试程序相同。我跑了(在命令提示符窗口中):

java -Djava.security.manager -Djava.security.policy=policy1 Test35

但它仍然没有用。

Exception in thread "main" java.lang.SecurityException: Prohibited package name: java.util
    at java.lang.ClassLoader.preDefineClass(ClassLoader.java:659)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:758)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:455)
    at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:367)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:360)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    at Test35.main(Test35.java:13)

我做错了什么,或者错过了一步?

0 个答案:

没有答案