SecureClassLoader 的目的是什么?

亚历山大·别列诺夫

我正在探索 Java 类加载器,然后我遇到了SecureClassLoader.

在查看了它的源代码并阅读了一些文章后,我意识到我无法理解它的安全功能和使用范围。

谁能解释一下SecureClassLoader干什么用的?

为什么它是“安全的”?

谢谢你。

布雷特·凯尔

Java 安全模型基于具有特定权限的类。

当某些方法尝试执行特权操作(例如,打开文件系统上的文件或打开网络套接字)时,会检查调用堆栈上的每个类以确定它是否具有适当的权限。

通过以下两种方式之一向类授予权限:

  1. 静态地,当类被定义时。
  2. 动态地,基于当前的安全策略(但仅当类定义为具有动态策略时)。

在这两种情况下,权限都是通过传递给 ClassLoader.defineClass 的 ProtectionDomain 授予的。ProtectionDomain 有两部分:静态授予类的权限,以及“代码源”(加载类的位置,通常是 JAR 或目录)或“代码签名者”(类保证来自具体来源)。如果类加载器创建了保护域,则代码源(或签名者)与当前的安全策略动态匹配,以确定是否应该授予额外的权限(例如,“从这个特定的 JAR 加载的类可以从这个特定的目录读取文件)这允许动态安全策略。

SecureClassLoader 有一个实用的 defineClass 方法,它接受一个 CodeSource,它为每个 CodeSource 维护一个延迟创建的 ProtectionDomain 的缓存(如果你想定义静态权限,允许你的子类覆盖 getPermissions),这样你的 ClassLoader 只需记住 CodeSource 而不是 ProtectionDomain . 实际上,大多数 ClassLoader 实现都有一个预定义的类路径,因此它们可以轻松地自己创建和存储 ProtectionDomain,因此类本身并不是特别有用。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章