java.lang.Object java.lang.ClassLoader java.security.SecureClassLoader
public class SecureClassLoader
此类扩展了 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.Object 继承的方法 |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
构造方法详细信息 |
---|
protected SecureClassLoader(ClassLoader parent)
如果有安全管理器,此方法会首先调用安全管理器的 checkCreateClassLoader
方法,以确保允许创建类加载器。
parent
- 父 ClassLoader
SecurityException
- 如果安全管理器存在并且其
checkCreateClassLoader
方法不允许创建类加载器。
SecurityManager.checkCreateClassLoader()
protected SecureClassLoader()
如果有安全管理器,此方法会首先调用安全管理器的 checkCreateClassLoader
方法,以确保允许创建类加载器。
SecurityException
- 如果安全管理器存在并且其
checkCreateClassLoader
方法不允许创建类加载器。
SecurityManager.checkCreateClassLoader()
方法详细信息 |
---|
protected final Class<?> defineClass(String name, byte[] b, int off, int len, CodeSource cs)
如果提供了非 null CodeSource,将构造 ProtectionDomain 并将其与要定义的类关联起来。
name
- 期望的类名称,如果未知,则为
null
,使用 '.'(而不是 '/')作为分隔符,并且末尾没有 ".class" 后缀。
b
- 组成类数据的字节。从
off
到
off+len-1
的字节应该具有由
Java Virtual Machine Specification 定义的有效类文件的格式。
off
- 类数据的
b
的起始偏移量
len
- 类数据的长度
cs
- 相关的 CodeSource,如果没有,则为
null
Class
对象和可选的 CodeSource。
ClassFormatError
- 如果数据未包含有效的类
IndexOutOfBoundsException
- 如果
off
或
len
为负数,或者
off+len
大于
b.length
。
SecurityException
- 如果试图将该类添加到包含用与该类不同的证书集签名的类的包中,或者类名以 "java." 开头。
protected final Class<?> defineClass(String name, ByteBuffer b, CodeSource cs)
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." 开头。
protected PermissionCollection getPermissions(CodeSource codesource)
此方法将由 defineClass 方法调用,后者在构造 ProtectionDomain 时将 CodeSource 作为要定义的类的参数。
codesource
- codesource。