WEB开发网
开发学院软件开发Java 基于 Java 2 运行时安全模型的线程协作 阅读

基于 Java 2 运行时安全模型的线程协作

 2009-09-20 00:00:00 来源:WEB开发网   
核心提示: 保护域,保护域可以理解为具有共同的权限集的类的集合,基于 Java 2 运行时安全模型的线程协作(2),在 Java 2 里,权限实际上是被赋予保护域的,或者到达堆栈底部为止,使用 doPrivileged 可以避免不必要的栈遍历(Stack Traverse),而不是直接赋给类,权限、保护域和

保护域,保护域可以理解为具有共同的权限集的类的集合。

在 Java 2 里,权限实际上是被赋予保护域的,而不是直接赋给类。权限、保护域和类之间的映射关系如图 2。

图 2. 类,保护域,权限的映射关系

基于 Java 2 运行时安全模型的线程协作

如图 2 所示,当前运行时堆栈是从 a.class 到 e.class。在运行时堆栈上的每一帧(Stack Frame)都会被 Java 划归为某个保护域(保护域是 Java 根据 Policy 文件配置构建出来的)。Java 的安全管理器在执行权限检查时,会对堆栈上的每个 Stack Frame 做权限检查,当且仅当每个 Stack Frame 被赋予的权限集都暗含(Imply)了所要求的权限时,该操作才被允许执行,否则 java.security.AccessControlException 异常将被抛出,该操作执行失败。

有关 Java 2 安全模型,有几点需要特别说明:

该模型是基于堆栈授权的,这在多线程的环境下,同样适用。例如当父线程创建了子线程,子线程的执行被看作是父线程执行的继续,所以 Java 的安全管理器在权限检查时,所检查的运行时堆栈,既包括当前子线程的,也包括从父线程那里继承过来的运行时堆栈。这意味着,用户不可能通过线程的创建来获得额外的权限。

Java 的开发者可以使用 AccessController.doPrivileged 来优化权限检查带来的额外性能开销。如图 3 所示,Java 的权限检查将从堆栈的顶部开始,逐一向下,直到碰到 doPrivileged 的方法调用,或者到达堆栈底部为止。使用 doPrivileged 可以避免不必要的栈遍历(Stack Traverse),提高程序的性能。

上一页  1 2 3 4 5 6 7  下一页

Tags:基于 Java 运行

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接