zoukankan      html  css  js  c++  java
  • 3.10保护域

    当类装载器将类型装入Java虚拟机时,它们将为每个类型指派一个保护域。保护域定义了授 予一段特定代码的所有权限。(一个保护域对应策略文件中的一个或多个grant子句。)装载入Java虚拟机的每一个类型都属于一个且仅属于—个保护域。

    类装载器知道它装载的所有类或接口的代码库和签名者。它利用这些信息来创建一个 CodeSource对象。它将这个CodeSource对象传递给当前Policy对象的getpermissions ()方法, 得到这个抽象类java.security.PermissionCollection的子类实例。这个PermissionCollection包含了到所有Permission对象的引用(这些Permission对象由当前策略授予指定代码来源)。利用它创建 的CodeSource和它从Policy对象得到的PermissionCollection,它可以实例化一个新的 ProtectDomain对象。它通过将合适的ProtectionDomain对象传递给defineClass ()方法,来将这 段代码放到一个保护域中。defineClass ()方法是类ClassLoader的一个实例方法,用户自定义 类装载器调用它来将类型导入到java虚拟机中。将类型指派到保护域中是一个重要的工作,就像在本章前面提到的一样,它是类装载器体系结构支持Java沙箱安全模型的三个方法中的一个。

    虽然这个Policy对象代表了一个从代码来源到权限的全局映射,但是最终还是由类装载器负责决定代码执行时将获得什么样的权限。例如,一个类装载器可以完全忽略当前的策略,而随机地赋予权限。或者,一个类装载器可以向由Policy对象的getPermissions ()方法返回的权限 中再添加一些权限。例如,如果一个类型装载器要装载一个applet代码,除了由当前策略可能授予这段代码的权限以外,它还可以添加一个权限,使得它可以建立一个到这个applet的源主机的 socket连接。现在读者可以明白了,类装载器在装载类时起到了重要的安全作用。

  • 相关阅读:
    cube.js 基于http 通道的数据实时更新bug 解决
    cube.js 基于http 通道的数据实时更新
    cube.js websocket 实时数据更新说明
    phpspy 进行php 项目性能分析
    使用groovy 下载maven依赖包
    java 几个不错的代码生成工具
    语言性能分析工具总结
    使用rbspy 分析ruby应该性能
    dremio v18.0 软件包可以使用了
    nginx rewrite查询字符串重写问题
  • 原文地址:https://www.cnblogs.com/mongotea/p/11979243.html
Copyright © 2011-2022 走看看