浅谈Java访问控制机制

发表于:2011-3-11 09:55

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:Lewiss    来源:51Testing软件测试网采编

  上面有提到,在Java 中每个 Class都保存有 ProtectionDomain的引用,这里 ClassA 和 ClassB 的 ProtectionDomain 模型如下:

  下面假设 ClassB 调用 ClassA 的去写 x.poperties 文件,那么 AccessControlContext 和 PermissionCollection 对应模型是这样的:

  当 AccessController.checkPermission 开始检查权限时,它知道要本次要检查的权限是 FilePermission(“x.properties”, “write”),即对 “x.properties”的写权限。于是它先获取调用过程上下文中所有类(main(JVM)-->ClassB-->ClassA-->FileOutputStream-->AccessController)的 ProtectedDomain 找出来:

  JVM 从 mian 执行的,它的 ProtectedDomain 是 SystemDomain

  ClassA 的 ProtectedDomain 是 ProtectedDomainA

  ClassB 的 ProtectedDomain 是 ProtectedDomainB

  FileInputStream 和 AccessController 的 ProtectedDomain 是 SystemDomain

  把访问上下文的 ProtectedDomain 都找出来后,就逐个检查每个 ProtectedDomain 是否有 FilePermission(“x.properties”, “write”) 权限。因为在 Java 访问控制机制中,它要确保每个调用的类都有该权限才能通过检查。

  于是,开始做下面检查:

  1) AccessController-->SystemDomain : Java 内部代码保护域,具有所有操作权限,检查通过

  2) FileInputStream-->SystemDomain : Java 内部代码保护域,具有所有操作权限,检查通过

  3) ClassA-->ProtectedDomainA: 在上面的 ProtectedDomainA 模型中,我们知道它是有 FilePermission(“x.properties”, “write”) 权限的,检查通过

  4) ClassB-->ProtectedDomainB: 在上面的 ProtectedDomainB 模型中,我们知道它没有 FilePermission(“x.properties”, “write”) 权限的,检查不通过

33/3<123
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号