java.security

接口
异常
java.lang.Object
  继承者 java.lang.ClassLoader
      继承者 java.security.SecureClassLoader
直接已知子类:
URLClassLoader

public class SecureClassLoader
     
extends ClassLoader

此类扩展了 ClassLoader,使它另外还支持使用相关的代码源和权限定义类,这些代码源和权限默认情况下可根据系统策略获取到。


构造方法摘要
protected SecureClassLoader()
          使用默认的父类加载器为委托创建新 SecureClassLoader。
protected SecureClassLoader(ClassLoader parent)
          使用指定的父类加载器为委托创建新 SecureClassLoader。
 
方法摘要
protected  Class<?> defineClass(String name, byte[] b, int off, int len, CodeSource cs)
          使用可选的 CodeSource 将 byte 数组转换为 Class 类的实例。
protected  Class<?> defineClass(String name, ByteBuffer b, CodeSource cs)
          使用可选的 CodeSource 将 ByteBuffer 转换为 Class 类的实例。
protected  PermissionCollection getPermissions(CodeSource codesource)
          返回给定的 CodeSource 对象的权限。
 
从类 java.lang.ClassLoader 继承的方法
clearAssertionStatus, defineClass, defineClass, defineClass, defineClass, definePackage, findClass, findLibrary, findLoadedClass, findResource, findResources, findSystemClass, getPackage, getPackages, getParent, getResource, getResourceAsStream, getResources, getSystemClassLoader, getSystemResource, getSystemResourceAsStream, getSystemResources, loadClass, loadClass, resolveClass, setClassAssertionStatus, setDefaultAssertionStatus, setPackageAssertionStatus, setSigners
 
从类 java.lang.Object 继承的方法
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

构造方法详细信息

SecureClassLoader

protected SecureClassLoader(ClassLoader parent)
使用指定的父类加载器为委托创建新 SecureClassLoader。

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

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

SecureClassLoader

protected SecureClassLoader()
使用默认的父类加载器为委托创建新 SecureClassLoader。

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

抛出:
SecurityException - 如果安全管理器存在并且其 checkCreateClassLoader 方法不允许创建类加载器。
另请参见:
SecurityManager.checkCreateClassLoader()
方法详细信息

defineClass

protected final Class<?> defineClass(String name,
                                     byte[] b,
                                     int off,
                                     int len,
                                     CodeSource cs)
使用可选的 CodeSource 将 byte 数组转换为 Class 类的实例。类必须解析后才能使用。

如果提供了非 null CodeSource,将构造 ProtectionDomain 并将其与要定义的类关联起来。

参数:
name - 期望的类名称,如果未知,则为 null,使用 '.'(而不是 '/')作为分隔符,并且末尾没有 ".class" 后缀。
b - 组成类数据的字节。从 offoff+len-1 的字节应该具有由 Java Virtual Machine Specification 定义的有效类文件的格式。
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)
使用可选的 CodeSource 将 ByteBuffer 转换为 Class 类的实例。类必须解析后才能使用。

如果提供了非 null CodeSource,将构造 ProtectionDomain 并将其与要定义的类关联起来。

参数:
name - 期望的类名称,如果未知,则为 null,使用 '.'(而不是 '/')作为分隔符,并且末尾没有 ".class" 后缀。
b - 组成类数据的字节。从 b.position()b.position() + b.limit() -1 的字节应该具有由 Java Virtual Machine Specification 定义的有效类文件的格式。
cs - 相关的 CodeSource,如果没有,则为 null
返回:
通过该数据创建的 Class 对象和可选的 CodeSource。
抛出:
ClassFormatError - 如果数据未包含一个有效类
SecurityException - 如果试图将该类添加到包含使用与该类不同的证书集签名的类的包中,或者类名以 "java." 开头。
从以下版本开始:
1.5

getPermissions

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

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

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