我正在探索 Java 类加载器,然后我遇到了SecureClassLoader
.
在查看了它的源代码并阅读了一些文章后,我意识到我无法理解它的安全功能和使用范围。
谁能解释一下SecureClassLoader
是干什么用的?
为什么它是“安全的”?
谢谢你。
Java 安全模型基于具有特定权限的类。
当某些方法尝试执行特权操作(例如,打开文件系统上的文件或打开网络套接字)时,会检查调用堆栈上的每个类以确定它是否具有适当的权限。
通过以下两种方式之一向类授予权限:
在这两种情况下,权限都是通过传递给 ClassLoader.defineClass 的 ProtectionDomain 授予的。ProtectionDomain 有两部分:静态授予类的权限,以及“代码源”(加载类的位置,通常是 JAR 或目录)或“代码签名者”(类保证来自具体来源)。如果类加载器创建了保护域,则代码源(或签名者)与当前的安全策略动态匹配,以确定是否应该授予额外的权限(例如,“从这个特定的 JAR 加载的类可以从这个特定的目录读取文件)这允许动态安全策略。
SecureClassLoader 有一个实用的 defineClass 方法,它接受一个 CodeSource,它为每个 CodeSource 维护一个延迟创建的 ProtectionDomain 的缓存(如果你想定义静态权限,允许你的子类覆盖 getPermissions),这样你的 ClassLoader 只需记住 CodeSource 而不是 ProtectionDomain . 实际上,大多数 ClassLoader 实现都有一个预定义的类路径,因此它们可以轻松地自己创建和存储 ProtectionDomain,因此类本身并不是特别有用。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句