分享
 
 
 

JavaTM安全体系结构 7

王朝java/jsp·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

JavaTM安全体系结构(JDK1.2)

7. GuardedObject和SignedObject

7.1 java.security.GuardedObject和java.security.Guard

回想一下,当访问控制决策必须在不同的上下文中作出时,AccessControlContext类是非常有用的。这里有另外一种情况:资源的供应者与资源的消费者不在同一个线程,并且消费者线程不能为供应者线程提供访问控制上下文信息(因为上下文是安全敏感的;或上下文太大,不能传递;或由于其它原因)。对这种情况,我们提供了一个被称为GuardedObject的类,来保护对这个资源的访问。见下图说明:

基本的想法是:资源的供应者可创建一个代表这个资源的对象,再创建一个将资源对象嵌套在内的GuardedObject, 然后,将GuardedObject提供给消费者。在创建GuardedObject时,供应者还要指定一个Guard对象;这样,如果某些在这个Guard内部的(安全)检查令人满意的话,任何人(包括消费者)则只能获得资源对象。

Guard是一个界面,所以任何对象可选择成为一个Guard。这个界面上的唯一方法被称为checkGuard。它提取一个Object变量,并执行一定的(安全)检查。java.security中的Permission类实现这个Guard界面。

例如,假设一个系统线程被要求为阅读访问打开一个文件/a/b/c.txt,但是系统线程不知道请求者是谁或这个请求是在什么情况下被做出的。因此,正确的访问控制决策不能在服务器端做出。系统线程可使用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包含另一个可序列化的对象,(将)签字的对象和它的数字签字。如果数字签字不是空,它将包含一个有效的已签字的对象的数字签字。这可以用下图表示:

底层签字算法是通过一个被当作sign方法调用来设置的,该方法的参数是Signature对象,算法可以是如下算法之一:NIST标准DSA、使用DSA和SHA-1。与数字签字一样,算法是用通常方式说明的,如 "SHA/DSA"。

已签字的对象是一个初始对象的"深度拷贝"(以序列化的形式),一旦拷贝完成,初始对象的操作对该拷贝不产生副作用,一个已签字的对象是永恒不变的。

创建一个已签字对象的典型事例如下:

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|..........

欢迎与我们联系:webmaster@prc.sun.com

版权所有 1997-1998 Sun(中国)公司,北京南礼士路66号建威大厦16层

All rights reserved.Legal Terms

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有