浅谈Java访问控制机制

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

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

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

#
java

  Java 访问控制机制的原理是:在某些策略配置文件中预定义好某些代码对某些资源具有某些操作权限,当某些代码以某个权限访问某个资源的时候,如果对该资源预指定的权限中没有该权限,则禁止访问,否则可以访问。

  上面一段话读起来比较晦涩,下面先以数据库用户和数据表为例来说明。

  指定某些代码对某些资源具有某些操作权限

  某些代码:用户 Admin, X

  某些资源:数据库表 User

  操作权限:用户 Admin(某些代码)对 User 表(某些资源) 具有 CRUD 权限

  用户 X(某些代码)对 User 表(某些资源) 具有 R 权限

  某些代码以某个权限访问某个资源

  用户 X(某些代码)查询(某个权限) User 表(某些资源),因为预定义中用户 X 对 User 表是有查询权限的,所以检查通过

  用户 X(某些代码)删除(某个权限) User 表(某些资源) 中某条数据,因为预定义中用户 X 对 User 表只有查询权限,没有删除权限的,所以检查不通过

  在 Java 中,道理也是一样的,只是 Java 中某个类相当于上面的某个用户,如 ClassA 相当于用户 Admin, ClassB 相当于用户 X。 但是在 Java 中情况稍微复杂一点,比如 ClassB 可以调用 ClassA 的方法,那么这时候,权限将如何检查呢?还是以例子来说明。

  指定某些代码对某些资源具有某些操作权限

  某些代码:用户 ClassA, ClassB

  某些资源:某个配置文件 x.properties

  操作权限:ClassA(某些代码)对 x.properties(某些资源) 具有读写权限

  ClassB(某些代码)对 x.properties(某些资源) 具有读权限

  某些代码以某个权限访问某个资源

  ClassA(某些代码)读或写(某个权限) 配置文件x.properties(某些资源),因为预定义中ClassA 对 x.properties是有读和写权限的,所以检查通过

  ClassB(某些代码)读(某个权限) 配置文件x.properties(某些资源),因为预定义中ClassB对 x.properties是有读权限的,所以检查通过

  ClassB(某些代码)写(某个权限) 配置文件x.properties(某些资源),因为预定义中ClassB对 x.properties是没有写权限的,所以检查不通过

  Class B 调用 ClassA 的写 x.properties 文件方法,是什么检查过程呢?

  在 Java 中,不管有几个类的反复调用,最终都是以某个权限操作某个资源,如这里是 Class B 调用 ClassA,其最终操作权限是以写的权限去操作 x.properties 文件。那么 Java 就会对反复调用过程中的所有类进行检查,看它们对 x.properties 文件是否有写权限,如果都有则通过,只要任何一个类没有该权限,则不通过。

  其中检查的过程与调用过程是互为逆向的。如在上例中,ClassB 调用 ClassA 的去写 x.properties 文件,那么 JVM 就会先检查 ClassA 对 x.properties 文件是否有写权限,因为预定义中有,所以 ClassA 通过。接下来检查 ClassB,因为预定义中,ClassB对 x.properties 文件没有写 权限,所以检查不通过,本次操作失败。

  在 Java 访问控制机制中,主要有以下几个类:

  SecurityManager
  AccessController
  AccessControlContext
  ProtectionDomain
  PermissionCollection
  Permission
  Policy
  SecurityManager/ AccessController

  访问控制的入口类。在 Java 中,访问控制默认是关闭的。

31/3123>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

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

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

沪ICP备05003035号

沪公网安备 31010102002173号