|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
学习JAVA的目的更多的是培养自身的工作能力,我觉得工作能力的一个核心就是:独立思考能力,因为只有独立思考后,才会有自己的见解
用户会见把持(Accesscontrol)机制老是环绕粗粒度和细粒度两个方面来会商:
粗粒度把持:能够划定会见全部对象或对象群的某个层,而细粒度把持则老是在办法或属性层举行把持,好比:
同意一个文件为只读是属于粗粒度把持,而同意对这个文件某行有写操纵则属于细粒度把持。
一个好的用户把持机制固然既同意粗粒度也同意细粒度把持,在Jive中我们看到是利用Proxy来到达这个目标,可是我们也发明,因为必要对每一个类都要举行细粒度把持,以是一定对每一个类都要做一个Proxy类,如许带来了良多Proxy类,如ForumProxyForumThreadProxyForumFactoryProxy等,有形增添了体系庞大性。
利用静态Proxy能够很好的办理这个成绩。再分离java.security.acl的ACL机制,我们就能够天真地完成粗粒度和细粒度的两重把持。
当一个用户login后,我们就要在内存中为其创建响应的受权会见机制,利用java.security.acl能够很便利的创建如许一个平安体系。
起首任何一个对象都应当有个基础属性:具有者或具有者所属组(Windows中每一个目次平安形貌符都由4部分组成:对象的创立者、对象所属的组、自在存取把持和体系存取把持)。
1.Javaacl入手下手第一步是创建一个主体Principal,个中SecurityOwner是主体的具有者:privatestaticfinalPrincipal_securityOwner=newPrincipalImpl("SecurityOwner");
2.当用户login出去时,他带有两个基础数据:会见暗码和他要会见的对象ApplicationName。起首考证用户名和暗码,然后从数据库中掏出其权限数据,创建Permission,这里利用Feature承继了Permission,在Feature中界说了有关权限的细节数据(如读写删)。
//掏出用户和被会见对象之间的权限干系,这类权限干系大概不但一个,也就是说,用户
//大概对被会见对象具有读写删等多个权限,将其打包在Hasbtable中。
Hashtablefeatures=loadFeaturesForUser(sApplicationName,sUserID);
3.创立一个用户对象
Useruser=newUserImpl(sUserID,newHashtable());
4.为这个用户创立一个举动的aclentry
addAclEntry(user,features);
个中最关头的是第四步addAclEntry,我们看看其怎样完成的:
//为这个用户创立一个新的Aclentry
AclEntrynewAclEntry=newAclEntryImpl(user);
//遍历Hashtablefeatures,将个中多种权限到场:
....
feature=(Feature)hFeatures.get(keyName);
newAclEntry.addPermission(feature);
....
最初也要到场主体具有者SecurityOwner
如许一个平安系统就已创建完成。
当你在体系中要查验某个用户利用具有某个权限,如读的权力时,只需
acl.checkPermission(user,feature)就能够,acl是ACL的一个实例,如许权限反省就交给
java.security.acl.ACL去向理了。
<p>
多谢指点,其实我对.net网页编程和ruby也不是很了解,对与java也只是刚起步的阶段,只是在学习中有了点想法就写出来了,现在俺本科还没毕业,所以对大型项目基本上也没有什么经验。 |
|