模块 java.base

类 SecureClassLoader

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

public class SecureClassLoader extends ClassLoader
此类扩展了 ClassLoader,额外支持定义具有关联代码源的类和默认情况下由系统策略检索的权限。
自从:
1.2
  • 构造方法详细信息

    • 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() 方法不允许创建类加载器。
      自从:
      9
  • 方法详情

    • 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 - 关联的代码源,如果没有则为 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 - 关联的代码源,如果没有则为 null
      返回:
      从数据创建的 Class 对象,以及可选的 CodeSource。
      抛出:
      ClassFormatError - 如果数据不包含有效类
      SecurityException - 如果尝试将此类添加到包含由与此类不同的一组证书签名的类的包中,或者如果类名以“java.”开头。
      自从:
      1.5
    • getPermissions

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

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

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