动态Proxy与Java ACL用户访谒掌握机制实现[Java编程]
本文“动态Proxy与Java ACL用户访谒掌握机制实现[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
用户拜候掌握(Access control )机制老是环绕粗粒度和细粒度两个方面来谈论:
粗粒度掌握:可以规定拜候整个对象或对象群的某个层,而细粒度掌握则老是在办法或属性层举行掌握,比方:
答应一个文件为只读是属于粗粒度掌握,而答应对这个文件某行有写操作则属于细粒度掌握.
一个好的用户掌握机制当然既答应粗粒度也答应细粒度掌握,在Jive中我们看到是利用Proxy来到达这个目的,但是我们也发现,由于需求对每个类都要举行细粒度掌握,所以必定对每个类都要做一个Proxy类,这样带来了很多Proxy类,如ForumProxy ForumThreadProxy ForumFactoryProxy等,无形增添了系统复杂性.
利用动态Proxy可以很好的办理这个问题.再结合java.security.acl的ACL机制,我们便可以机动地实现粗粒度和细粒度的双重掌握.
当一个用户login后,我们就要在内存中为其成立呼应的受权拜候机制,利用java.security.acl可以很便利的成立这样一个安全系统.
首先任何一个对象都应当有个基本属性:拥有者 或拥有者所属组(Windows中每个目录安全描写符都由4部份构成:对象的成立者、对象所属的组、安闲存取掌握和系统存取掌握).
1. Java acl开始第一步是成立一个主体 Principal,此中SecurityOwner是主体的拥有者: private static final Principal _securityOwner = new PrincipalImpl("SecurityOwner");
2. 当用户login进来时,他带有两个基本数据:拜候密码和他要拜候的对象ApplicationName.首先考证用户名和密码,然后从数据库中取出其权限数据,成立Permission,这里利用Feature担当了Permission,在Feature中定义了有关权限的细节数据(如读 写 删).
// 取出用户和被拜候对象之间的权限关系,这种权限关系大概不只一个,也就是说,用户
//大概对被拜候对象拥有读 写 删等多个权限,将其打包在Hasbtable中.
Hashtable features = loadFeaturesForUser(sApplicationName, sUserID);
3. 成立一个用户对象
User user = new UserImpl(sUserID, new Hashtable() );
4. 为这个用户成立一个活动的acl entry
addAclEntry( user, features);
此中最关键的是第四步addAclEntry,我们看看其若何实现的:
// 为这个用户成立一个新的Acl entry
AclEntry newAclEntry = new AclEntryImpl( user);
//遍历Hashtable features,将此中多种权限加入:
....
feature = (Feature) hFeatures.get(keyName);
newAclEntry.addPermission( feature );
....
最后也要加入主体拥有者SecurityOwner
这样一个安全部系就已经成立完成.
当你在系统中要查验某个用户利用拥有某个权限,如读的权利时,只要
acl.checkPermission(user, feature )便可以,acl是ACL的一个实例,这样权限查抄就交给
java.security.acl.ACL 去处理了.
以上是“动态Proxy与Java ACL用户访谒掌握机制实现[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |