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

Java 加载您自己的SecurityManager或禁用现有的,java,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(S

我想加载我自己的
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
  • 在本文中,我了解到可以加载您自己的SecurityManager
如果您的类加载器 返回它自己的值java.lang.SecurityManager,但该值没有返回 有和真的一样的支票

  • 我还读到有可能禁用SecurityManger

你会建议我用什么方法来解决这个问题?它是可以解决的吗

您不能也永远不能重写以
java开头的包中的类。
;它与SecurityManager无关,而是在
ClassLoader::preDefineClass


考虑到这意味着你所遵循的推理路线存在严重错误(tm);你能解释一下你为什么需要这样做吗?

首先,你应该试着解释一下你为什么需要这样做,也许有类似AOP的替代方案。