加载您自己的SecurityManager或禁用现有的

时间:2015-12-07 10:36:50

标签: java

我想加载自己的java.lang.String

public class StringCustomClassFactory {
    public static String newInstance() {
        URLClassLoader tmp = new URLClassLoader(new URL[] {new URL("file:///home/.../target/classes/") }) {
            public Class loadClass(String name) {
                if ("java.lang.String".equals(name))
                        return findClass(name);
                    return super.loadClass(name);
                    //exception handling is omitted 
            }
        };
return (String) tmp.loadClass("java.lang.String").newInstance();
//...

但我经常收到异常:

Exception in thread "main" java.lang.SecurityException: Prohibited package name: java.lang
  • 在此tutorial中,我读过可以加载自己的SecurityManager
  

如果您的类加载器,系统的安全性可能会受到影响   返回了自己的java.lang.SecurityManager值,但没有   和实际的一样检查。

  • here我已经读过可以禁用SecurityManger

你会建议我解决这个问题,它是否可以解决?

1 个答案:

答案 0 :(得分:1)

您不能,也永远无法覆盖以java.开头的包中的类;它与SecurityManager无关,而是在ClassLoader::preDefineClass

中强制执行

考虑到这意味着你所遵循的推理路线是非常错误的(t​​m);你能解释为什么需要这个吗?