聚集的权限
在本文中,将同时介绍老的以代码为中心的 java 授权体系结构和新的以用户为中心的体系结构我将首先对 java 2 平台安全体系结构作一概述,重点放在这个体系结构如何利用两个基本概念 -- 安全策略和保护域 -- 来定义、组织和聚集静态和/或动态访问权限然后详细分析 java 2 平台安全体系结构的运行时访问检查功能的底层机制,包括堆栈检查和确定是否授予权限的遍历(traversal)机制在了解了以代码为中心的授权模型是如何工作的后,我将转java向 java 授权和认证服务(jaas)的以用户为中心的授权模型在这里,我将重点放到基于 subject 的访问控制这一概念上,并展示在 jaas 中,它是如何在原来 java 2 平台安全体系结构的堆栈检查机制之上实现的
在允许一段运行的代码对特定的“目标”执行特定的“操作”这一上下文中,一个重要的概念是代码不一定被授予与所需要完全一样的 permission 相反,只要可以从实际授予这段代码的 permission 中推断出或者隐含了所需要的 permission 就可以
java 2 平台安全体系结构背后的基本原理可以总结如下:一个系统级的 安全策略定义了按 保护域组织的执行代码的 访问权限(按照应用java程序的需要)安全策略用于访问控制检查,这是由 jvm 在运行时执行的在本次导游中,我将逐一详细阐述这些概念
jdk 1.x 模型和 java 2 平台 sdk 版本 1.2 的新安全结构之间的最大区别是引入了新的、可配置的安全策略,这样就可以实现细化的和可管理的访问控制所有代码(不管是本地还是下载的,不管是签名或者没有签名的)都可以受到定义良好的安全策略的约束,它为不同的代码授予(可能是重叠的)权限同时,随着在 jvm 中引入了多进程能力(请参阅 参考资料),出现了对基于用户的访问控制的要求
[it168技术文档]
在 java 2 平台安全体系结构中,所有访问权限都是类型化的并且有层次结构,其根是抽象类 java.securijava培训学校ty.permission 通常一个 permission 包含一个目标(“由这个权限控制的操作将对谁执行?”)和一个操作(“如果这个权限允许的话,对这个目标将执行什么操作?”)
permissions 对象
访问权限作为类型化(typed)对象
在信息安全性领域,授权是世界的的中心,因为它是控制个体(即人、进程和计算机)对系统资源的访问权限的过程直到最近,在 java 安全体系结构中相关的问题都是“这段运行中的代码的访问权限是什么?” 随着 java 认证和授权服务(java authentication and authorization service,jaas)的引入,这种情况改变了jaas 首先是作为 jdkjava编程思想 版本 1.3 的平台扩展,之后作为 jdk 1.4 及以后版本的核心部分在 jaas 中,相关问题变成了“运行这段代码的认证用户的访问权限是什么?”
这样的类型化对象干净地封装了创建和维护一个集合并遍历这一集合的功能不用在每次要检查权限时对每一个对象分别调用 implies() 方法,java 运行时只是调用由 permissioncollection 对象提供的 implies() 方法并等待其响应可以为所创建的每一个自定义 permission 对象定义一种新的 permissioncollection 类型当然, permissioncollection 中 implies() 方法的具体实现取决于给定 p主要优点ermission 对象的特性
新安全体系结构也引入了 聚集(aggregation)的概念在 java 2 平台上,可以聚集同一类型的 permission 对象的多个实例一组这种类型称为 permissioncollection 例如,一个 permissioncollection 可能包含两个 java.io.filepermission 实例,表示读取两个不同文件的特权
以代码为中心的授权
java 平台传统上是用来运行移动代码的,如 applet为了保护系统资源不被这些从网络上下载到用户浏览器中的任意代码片段所破坏,applets 被限制到一个沙箱中,它们在这里以有限的一组权限运行 另一方面,对Java的优点有哪些于本地 java 应用程序,很少会(如果会的话)安装将提供类似沙箱环境的安全管理器因此,本地应用程序通常受到信任可以访问所有系统资源
显然,某个 permission 是否隐含另一个 permission 的定义将取决于这两个 permission 是如何定义的至少,这两个 permission 必须为同一类型不过,不能指望运行时进行进一步的判断,并且必须将这种隐含推断逻辑指派给所涉及的 permission 类运行时通过调用一个恰当地取名为 implies 的方法来查询 permission 类的隐含推断逻辑
注意,本文假定读者熟悉 java 平台(j2se sdk 1.4)上的应用程序编程,以及企业应用程序学Java好不好找工作安全性的基本概念与 java 平台的以代码为中心和以用户为中心的授权体系结构的所有概念都只作为介绍
除了对特定的 permission 类型有多个实例,任何给定的一段运行代码都将得到不同类型的 permission java 2 平台安全体系结构为此以 permissions 对象的形式提供了一组 permissioncollection 对象一个 permissions 对象是单个 permission 实例的 集合的 集合 permissions 类还提供了一个 implies() 方法不过,要记住为了让一个 permission 隐含另一个,它们必须是同一类型的因此,调用 permissionJava程序员s 对象的 implies() 方法会使后者首先在其内部集合中定位正确的 permissioncollection 实例(那个包含一组正确类型的 permission 对象的实例),然后调用由此获得的 permissioncollection 对象的 implies() 方法,并向它传递要检查的 permission