Module java.base
Package java.security

Class SecureClassLoader

java.lang.Object
java.lang.ClassLoader
java.security.SecureClassLoader
直接已知的子类:
URLClassLoader

public class SecureClassLoader extends ClassLoader
该类扩展了ClassLoader,额外支持为具有关联代码源和默认情况下由系统策略检索的权限定义类。
自JDK版本:
1.2
  • Constructor Details

    • SecureClassLoader

      protected SecureClassLoader(ClassLoader parent)
      使用指定的父类加载器创建一个新的SecureClassLoader

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

      参数:
      parent - 父类加载器
      抛出:
      SecurityException - 如果存在安全管理器且其checkCreateClassLoader方法不允许创建类加载器。
      参见:
    • SecureClassLoader

      protected SecureClassLoader()
      使用默认的父类加载器创建一个新的SecureClassLoader

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

      抛出:
      SecurityException - 如果存在安全管理器且其checkCreateClassLoader方法不允许创建类加载器。
      参见:
    • SecureClassLoader

      protected SecureClassLoader(String name, ClassLoader parent)
      使用指定名称和指定父类加载器创建一个新的SecureClassLoader
      参数:
      name - 类加载器名称;如果未命名,则为null
      parent - 父类加载器
      抛出:
      IllegalArgumentException - 如果给定名称为空。
      SecurityException - 如果存在安全管理器且其SecurityManager.checkCreateClassLoader()方法不允许创建类加载器。
      自JDK版本:
      9
  • Method Details

    • defineClass

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

      如果提供了非空的CodeSource,则会构造一个ProtectionDomain并与正在定义的类关联。

      参数:
      name - 类的预期名称;如果未知,则为null,使用'.'而不是'/'作为分隔符,且不带有结尾的".class"后缀。
      b - 构成类数据的字节。位置在offoff+len-1的字节应符合由Java虚拟机规范定义的有效类文件格式。
      off - 类数据在b中的起始偏移量
      len - 类数据的长度
      cs - 关联的CodeSource;如果没有,则为null
      返回:
      从数据创建的Class对象,以及可选的CodeSource。
      抛出:
      ClassFormatError - 如果数据不包含有效类
      IndexOutOfBoundsException - 如果offlen为负,或者如果off+len大于b.length
      SecurityException - 如果尝试将此类添加到包含由不同证书集签名的类的软件包中,或者如果类名以"java."开头。
    • defineClass

      protected final Class<?> defineClass(String name, ByteBuffer b, CodeSource cs)
      ByteBuffer转换为Class类的实例,可选地包含CodeSource。在使用类之前,必须解析该类。

      如果提供了非空的CodeSource,则会构造一个ProtectionDomain并与正在定义的类关联。

      参数:
      name - 类的预期名称;如果未知,则为null,使用'.'而不是'/'作为分隔符,且不带有结尾的".class"后缀。
      b - 构成类数据的字节。从b.position()b.position() + b.limit() -1的字节应符合由Java虚拟机规范定义的有效类文件格式。
      cs - 关联的CodeSource;如果没有,则为null
      返回:
      从数据创建的Class对象,以及可选的CodeSource。
      抛出:
      ClassFormatError - 如果数据不包含有效类
      SecurityException - 如果尝试将此类添加到包含由不同证书集签名的类的软件包中,或者如果类名以"java."开头。
      自JDK版本:
      1.5
    • getPermissions

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

      当defineClass方法调用此方法时,该方法将以CodeSource作为参数,用于构造正在定义的类的ProtectionDomain。

      参数:
      codesource - 代码源。
      返回:
      授予代码源的权限。