JavaTM安全体系结构(JDK1.2)
7. GuardedObject和SignedObject
7.1 java.security.GuardedObject和java.security.Guard
回想一下,当访问控制决策必须在不同的上下文中作出时,AccessControlContext类是非常有用的。这里有另外一种情况:资源的供应者与资源的消费者不在同一个线程,并且消费者线程不能为供应者线程提供访问控制上下文信息(因为上下文是安全敏感的;或上下文太大,不能传递;或由于其它原因)。对这种情况,我们提供了一个被称为GuardedObject的类,来保护对这个资源的访问。见下图说明:
FileInputStream f = new FileInputStream ("/a/b/c.txt");
FilePermission p = new FilePermission ("/a/b/c.txt", "read");
GuardedObject g = new GuardedObject (f, p);
现在,系统线程可将g传递给消费者线程。消费者线程要获得文件输入流,必须调用:
FileInputStream fis = (FileInputStream) g.getObject();
这个方法结果调用在Guard对象p上的checkGuard方法,并且由于p是一个许可,所以它的checkGuard方法事实上是:
SecurityManager sm = System.getSecurityManager ();
if (sm ! = null) sm.checkPermission (this);
这可以保证一个真正的访问控制检查发生在消费者上下文内。事实上,你可以在许多情况下,替换常用哈希表和访问控制列表,并直接存储GuardedObject的哈希表。
这个GuardedObject和Guard的基本模式是非常通用的,我们期望通过继承这个基本的GuardedObject和Guard的类,开发人员可以轻松地获得极强大的访问控制工具。例如:用一个适当的方法的Guard可获得每个方法的调用,并且一个Guard可检查该日的时间、调用者的签字或其它证明、或任何其它相关的信息。
注意:由于GuardedObject返回一个Object,所以某些键入信息会丢失。要在合作方之间使用GuardedObject,接受方应该了解希望获得对象的什么类型(以及转换类型)。事实上,我们预见GuardedObject的多数用法涉及创建子类(即形成一个GuardedFileInputStream类),从而封装键入信息,类型转换也可在子类中相应地进行。
7.2 java.security.SignedObject
这个类是其它安全要素的基本积木块。SignedObject包含另一个可序列化的对象,(将)签字的对象和它的数字签字。如果数字签字不是空,它将包含一个有效的已签字的对象的数字签字。这可以用下图表示:
Signature signingEngine = Signature.getInstance(algorithm,provider);
SignedObject so = new SignedObject(myobject, signingKey, signingEngine);
一个典型的校验例子如下,so是一个被收到的SignedObject对象。如果已知算法的名称,则这里的第一行可被忽略:
String algorithm = so.getAlgorithm();
Signature verificationEngine = Signature.getInstance(algorithm, provider);
so.verify(verificationEngine);
SignedObject的潜在应用包括:
它可作为一个不可伪造的鉴别令牌在任意Java应用环境内使用:它可任意传递,而不必担心该令牌在没有被检测到的情况下而被恶意更改;
它可被用来为Java运行时以外的存储器签署并序列化数据/对象(例如,在磁盘上存储访问控制的关键数据);
嵌套的SignedObjects可被用来构造一个签字的逻辑顺序,就象认证和授权的链一样。
我们期望这个类在将来可以创建子类,以允许在相同的签字对象上有多个签字。那样,在这个基础类上的现存方法调用将在语意上是全兼容的。特别是如果只有一个签字,则任意get方法将返回单独值;如果有多个签字,则将从签字集中返回一个任意值。
..........|Next|..........
欢迎与我们联系:[email protected]
版权所有 1997-1998 Sun(中国)公司,北京南礼士路66号建威大厦16层
All rights reserved.Legal Terms
本文地址:http://com.8s8s.com/it/it18870.htm