模块  java.base
软件包  java.security

Class SecureClassLoader

  • 已知直接子类:
    URLClassLoader

    public class SecureClassLoader
    extends ClassLoader
    此类扩展了ClassLoader,并为定义具有相关代码源和权限的类提供了额外支持,这些代码源和权限默认情况下由系统策略检索。
    从以下版本开始:
    1.2
    • 构造方法详细信息

      • SecureClassLoader

        protected SecureClassLoader​(ClassLoader parent)
        使用指定的父类加载器创建新的SecureClassLoader以进行委派。

        如果有安全管理器,则此方法首先调用安全管理器的checkCreateClassLoader方法,以确保允许创建类加载器。

        参数
        parent - 父类ClassLoader
        异常
        SecurityException - 如果存在安全管理器且其 checkCreateClassLoader方法不允许创建类加载器。
        另请参见:
        SecurityManager.checkCreateClassLoader()
      • SecureClassLoader

        protected SecureClassLoader()
        使用默认的父类加载器创建新的SecureClassLoader以进行委派。

        如果有安全管理器,则此方法首先调用安全管理器的checkCreateClassLoader方法,以确保允许创建类加载器。

        异常
        SecurityException - 如果存在安全管理器且其 checkCreateClassLoader方法不允许创建类加载器。
        另请参见:
        SecurityManager.checkCreateClassLoader()
      • SecureClassLoader

        protected SecureClassLoader​(String name,
                                    ClassLoader parent)
        创建具有指定名称的新 SecureClassLoader ,并使用指定的父类加载器进行委派。
        参数
        name - 类加载器名称; null如果没有命名
        parent - 父类加载器
        异常
        IllegalArgumentException - 如果给定名称为空。
        SecurityException - 如果存在安全管理器且其 SecurityManager.checkCreateClassLoader()方法不允许创建类加载器。
        从以下版本开始:
        9
    • 方法详细信息

      • defineClass

        protected final <?> defineClass​(String name,
                                             byte[] b,
                                             int off,
                                             int len,
                                             CodeSource cs)
        使用可选的CodeSource将字节数组转换为类Class的实例。 在可以使用该类之前,必须解决它。

        如果提供了非null的CodeSource,则构造ProtectionDomain并将其与正在定义的类相关联。

        参数
        name - 类的预期名称,或null如果未知),使用'。' 而不是'/'作为分隔符,没有尾随的“.class”后缀。
        b - 组成类数据的字节。 位置offoff+len-1的字节应具有The Java™ Virtual Machine Specification定义的有效类文件的格式。
        off - 类数据的 b中的起始偏移量
        len - 类数据的长度
        cs - 关联的CodeSource,如果没有, null
        结果
        从数据创建的 对象,以及可选的CodeSource。
        异常
        ClassFormatError - 如果数据不包含有效类
        IndexOutOfBoundsException - 如果 offlen为负数,或者 off+len大于 b.length
        SecurityException - 如果尝试将此类添加到包含由与此类不同的证书集签名的类的包,或者类名以“java。”开头。
      • defineClass

        protected final <?> defineClass​(String name,
                                             ByteBuffer b,
                                             CodeSource cs)
        ByteBuffer转换为类的实例,并带有可选的CodeSource。 在可以使用该类之前,必须解决它。

        如果提供了非null的CodeSource,则构造ProtectionDomain并将其与正在定义的类相关联。

        参数
        name - 类的预期名称,或null如果未知),使用'。' 而不是'/'作为分隔符,没有尾随的“.class”后缀。
        b - 组成类数据的字节数。 位置b.position()b.position() + b.limit() -1的字节应具有The Java™ Virtual Machine Specification定义的有效类文件的格式。
        cs - 关联的CodeSource,如果没有, null
        结果
        从数据创建的 对象,以及可选的CodeSource。
        异常
        ClassFormatError - 如果数据不包含有效类
        SecurityException - 如果尝试将此类添加到包含由与此类不同的证书集签名的类的包,或者类名以“java。”开头。
        从以下版本开始:
        1.5
      • getPermissions

        protected PermissionCollection getPermissions​(CodeSource codesource)
        返回给定CodeSource对象的权限。

        这个方法由defineClass方法调用,该方法在为正在定义的类构造ProtectionDomain时将CodeSource作为参数。

        参数
        codesource - 代码源。
        结果
        the permissions granted to the codesource.