快速业务通道

一种基于Struts框架的RBAC实现 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-14
库设计

RBAC中用户、角色和权限关系应该存储在数据库中。在实施验证时,可以根据发出请求的用户(通常在用户登录时由系统保存)查找其角色和权限信息。

数据库中需要以下几个表:

(1) 用户表:OA_USER{id,Sys_Name,Password,other user infomation}。

(2) 角色表:OA_ROLE{id,Role_Name,other role infomation}。

(3) 权限表:OA_POWER{id,Power_Name,other power information}。

(4) 用户-角色表:OA_USER_ROLE{id,User_id,Role_id}。

(5) 角色-权限表:OA_ROLE_POWER{id,Role_id,Power_id}。

我们不采用将URL资源及对应权限关系存放于数据库的方式,以减少权限审查时数据库访问次数。

4.2  URL请求的设计

考虑到可能有多种操作请求通过同一个Action转发,我们规定在URL中添加请求参数,以表明它所指向的Action以及操作形式。具体形式可以这样:*.do?actionType=ProjectDelete,其中actionType参数的值即表明了操作形式。对于针对相同Action的请求,由于可以使用actionType参数加以区分,因此这种方式可以解决URL粒度太粗的问题。

一种基于Struts框架的RBAC实现(3)

时间:2011-10-07

4.3  struts-config.xml的设计

由于URL资源与权限的映射关系没有存放于数据库,而这种映射关系又是权限审查时的重要依据,因此必须解决映射关系的存储问题。通过分析,我们发现,之所以需要知道URL与权限的映射关系,本质上是为了反映这样一个问题:每个Action都需要知道它的actionType与哪一个权限对应。也就是说,如果我们让Action知道了它的actionType所对应的权限也就解决了URL资源与权限的映射关系。

为实现上述目标,struts-config.xml需要做如下配置:

…… …… ……

配置Action时,对于需要进行权限审查的Action,可以配置其Parameter属性,以“actionType(Power_Name)”形式保存actionType与权限的映射关系,多个actionType与权限的映射可以用分号作为分隔。当请求指向Action时,可以获取并分析Parameter参数值,用以完成权限审查。

4.4  权限验证算法的设计

首先,既然系统中大部分的Action都需要进行形式相似的权限验证,其中必然存在可复用的设计。结合面向对象的思想,我们可以设计一个基类Action,不妨取名为BaseAction,在该Action中封装权限审查逻辑,系统中所有需要进行权限审查的Action,都可以从该类继承,由此天生具有了权限审查能力。这样,我们就实现了权限审查逻辑的集中管理,便于系统的维护。

BaseAction类设计如下:

public  abstract class BaseAction extends Action { public ActionForward execute(ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServlet Response response) { if(checkPower(request,mapping)) { ActionForward forward=doExecute(mapping,form,request,response); return forward; } else return mapping.findForward(”nopower”); } public abstract ActionForward doExecute(ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response);//要求所有BaseAction的子类必须实现该方法,供Excute方法调用 private String getActionPower(ActionMapping mapping) {//根据request传递的paramter值,在配置文件中查找对应权限名称并返回 String actionType=request.getParameter (”action Type”); String parameter=mapping.getParameter(); …… } private boolean checkPower(HttpServletRequest request,ActionMapping ma

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号