通用权限设计方案

来源 :电脑知识与技术 | 被引量 : 0次 | 上传用户:flypig2
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  摘要:在现在各种基于Java的信息系统的设计与实现中,用户权限管理是一个不可缺少的模块。目前通常的设计思想是利用像Acegi这样优秀的开源框架提供描述性的安全保护。这里通过一个用户权限管理系统介绍了利用Spring的面向方面特性使权限管理在基于Spring系统中通用的一种实现方案。
  关键词:数据库;Acegi;面向方面编程;切面;角色
  中图分类号:TP311文献标识码:A文章编号:1009-3044(2007)18-31655-02
  Universal Permission Solution ——Permission Design of B/S System Based on Spring
  ZHONG Liang
  (School of Software Engineering,Tongji University,Shanghai 201804,China)
  Abstract:In the design and implementation of J2EE MIS, pemission management is an indispensable module. The general design is providing declarative security with a good framework such as Acegi. It introduces a solution which makes the pemission authentication module universal in Spring-based system. And it mainly implemented with aspect-oriented programming feature of Spring Framework.
  Key words:Database;Acegi;AOP;Aspect;Role
  
  1 引言
  
  在大多数信息系统中,安全性都是一个非常重要的切面。这里用“切面”这个词,主要是因为安全性是贯穿整个应用系统的关注点。这在AOP(面向方面编程)中一般称之为一个切面,与系统中的其他模块,如日志,事务管理模块同属于系统的切面。介绍的系统也是根据这个理论利用Spring框架的AOP特性和基于数据库的用户权限来实现系统的安全性。
  这里所说的系统安全性,主要是指通过何种手段来确保系统信息的机密性和完整性。主要是认证和授权两种。认证是指确保用户的身份与其声称的一致,最基本也是最常用的认证形式是由用户说明自己的身份再提供只能由该用户生成的信息,也就是常见的用户名和密码。授权是指系统决定用户在通过认证后可进行那些操作。常见的有两种方法,访问控制列表(Access Control Lists)与指派角色和组。
  
  2 AOP和Acegi
  
  AOP是一种编程技术,用于在系统中实现业务的分离。在实际应用中,系统通常由很多组件组成,每个组件负责一部分功能。但是除了完成核心业务的组件之外,系统一般还包括日志、事务和安全等融入到其他功能模块中的服务。本文主要讨论安全服务的设计,所以以Spring的AOP支持作为框架基础的Acegi安全系统是设计的基础。
  Acegi安全系统是是AOP技术在安全模块应用的一个典型框架。它主要包括4大组件来实施安全性:安全拦截器,认证管理器,访问决策管理器和运行身份管理器,如图1所示。
  图1 Acegi框架图
  下面简单介绍一下每个组件在系统中扮演的角色。
  安全拦截器
  所有的安全系统目的都是保证系统的受保护资源不被没有权限的人访问。安全拦截器便是在系统中充当看门人的角色。
  认证管理器
  认证管理器是要通过安全拦截器必须打开的两把“锁”之一。它负责确定访问用户的身份,一般通过用户提供自己的身份(用户名)和凭证(密码)来实现。
  访问决策管理器
  用户通过认证管理器的确认之后,安全拦截器必须决定用户是否拥有访问受保护资源的恰当的权限。这就是访问决策管理器需要完成的事情。
  运行身份管理器
  运行身份管理器用于在获得系统认证和授权以后,在访问相关的其他资源时用预定义的身份替换用户的身份,以便允许用户访问其他相关的资源。
  
  3 系统设计与实现
  
  本管理系统实际上是一个组件,完成一般J2EE系统所需的用户和权限管理功能。面向的主要是应用系统的设计者和程序员,而最终用户也可以使用该权限系统提供的管理功能。具体到整个权限系统内部,主要分为用户管理(包括组管理)和角色管理(访问控制)。
  用户管理主要完成的功能是用户和用户组信息的存储、维护以及用户身份验证。用户隶属于某个组,组和组之间可以相互有父子关系。
  角色管理主要完成的功能是用户角色的创建、维护和角色权限的管理。角色可以赋给用户或者用户组,角色拥有权限。由于权限的设定涉及很多业务逻辑和组件,因此由系统设计者和开发人员在设计和开发阶段确定各种系统资源的访问权限。
  跟大多数应用系统一样,用户和角色的管理通过关系数据库的表和相互之间的关系来表示。主要包含USER_INFO,USER_GROUP,USER_ROLE,USERGROUP_ROLE,ROLES和PERMISSIONS等六个表。USER_INFO和USER_GROUP两个表分别存储用户和用户组的信息。PERMISSIONS表用于存储系统各项资源的访问权限,包括的信息有权限代码、描述和系统资源。这里的系统资源用字符串表示,典型的有Java类,访问的URI等,例如permission.admin.RoleAction和product/addProduct.jsp。ROLES表存储了整个系统所有的角色的信息,包括角色名称、拥有的权限。在数据库中,角色拥有的权限用PERMISSIONS表中权限的代码的组合来表示。比如有以下三种权限:
  101 角色管理 permission.admin.RoleAction
  102 角色页面访问 permission.admin.RoleManager
  103 用户页面访问 permission.admin.UserManager
  则ROLES表中表示系统管理员角色的权限的字符串就是“101,102,103”。
  USER_ROLE和USERGROUP_ROLE表中存储的就是用户和角色、用户组和角色的对应关系。详细的数据库结构和关系参见图2。
  图2 数据库结构和相互关系
  除了数据库的设计之外,权限系统的整体结构也是实现这个系统的关键。整个系统的权限控制主要采用了Servlet Filter和Spring的AOP思想。所有的关键在Spring的配置文件中。
  系统支持三种权限验证方案。第一种是以URI作为权限代码分配的资源,第二种是以类名作为权限代码分配的资源,第三种是以方法名作为权限分配的资源。在此只介绍各种方法的主要设计思想。
  第一种方法采用Servlet过滤器来拦截对应用系统的请求,并且在应用系统真正处理请求之前进行某些安全处理。主要实现步骤如下:
  (1)首先需要为目标系统配置过滤器UriACFilter,该过滤器用来在处理请求之前验证用户的权限是否满足。
  (2)_实现ResourceToPermission接口的String getPermission(String resource)方法,该接口用于通过当前请求的URI(由参数resource提供)来取得该资源的权限代码。具体见前面关于PERMISSIONS数据表的描述。
  (3)修改spring-acs-core.xml文件中关于ResourceToPermission接口实现bean的定义。
  (4)定义数据库表PERMISSIONS的记录。
  第二和第三种方法,用到了Spring的切入点和通知(环绕通知)的概念。因此要使用这两种方法,要求系统的逻辑层代码使用aop技术。即是业务逻辑bean应该由容器管理(如系统默认的容器spring),在容器中配置拦截器应用切面。主要实现步骤有两步:
  (1)首先自定义拦截器实现aopalliance的MethodInterceptor接口,在拦截器中对用户的权限进行验证,比如用户是否有权访问类或方法;然后用Spring中的正则表达式切入点将自定义的拦截器和切入点组合到一个Spring bean中,同时定义切入点的正则表达式“patterns”,以决定何时应用切面。
  (2)首先配置业务逻辑bean,然后以该bean为参数配置targetSource,最后用Spring的ProxyFactoryBean配置该业务逻辑bean的代理。此步骤由使用本权限系统的开发人员在目标系统中配置,这种做法也是为了实现本权限系统的通用性。
  (3)定义数据库表PERMISSIONS的记录,资源为类的全限定名或者全限定名.方法名。例如,permission.admin.RoleAction和permission.admin.RoleAction.delete。
  以类名和方法名分配权限的方法比较复杂,下面简单描述一下Spring配置文件的配置情况。
  (1)配置拦截器:
  以类名分配权限:
  
  

  以方法名分配权限:
  
  

  (2)配置Spring的切入点:
    class="org.springframework.aop.support.RegexpMethodPointcutAdvisor">
  
  
  

  
  
  .*getAll.*
  .*add.*
  ……
  

  

  

  用户可以使用含有getAll,add,delete,update,……等的任意方法名来配置属性patterns。
  (3)配置逻辑bean。
  此处配置的逻辑bean是本系统用来进行用户和权限管理的bean,在目标系统的配置文件中定义。以permission.admin.RoleAction为例配置如下:
  配置bean:
  
  

  配置TargetSource:
  
  
  roleActionSpring
  

  

  配置代理:
  
  
  
  

  
  
  permissionAdvisor
  

  

  

  
  4 总结
  
  本用户和权限管理系统在设计的时候以通用性作为目标,在使用Spring作为系统基础的前提下,很大程度上实现了通用。用户在使用该系统的时候,只需在自己的系统中加入库文件和一些配置文件就可以使用该用户权限管理系统。而且用户可以很方便的决定是否使用该系统中的用户管理部分。当目标系统非常庞大的时候,权限验证的效率是有待改进的部分。
  由于篇幅所限,这里只介绍了系统的数据库设计和权限设计部分的核心思想与实现。
  
  参考文献:
  [1]Craig Walls.李磊,程立,周悦虹.译.Ryan Breidenbach.Spring in Action[M].人民邮电出版社,2006.
  [2]Christopher Steel,Ramesh Nagappan,Ray Lai. 陈秋萍,罗邓,袁国忠.译.安全模式-J2EE、Web服务和身份管理最佳实践与策略[M].机械工业出版社,2006.
  [3]罗时飞.敏捷ACEGI、CAS--构建安全的JAVA系统[M].电子工业出版社,2007.
  [4]Renaud Pawlak,Jean-Philippe Retaillé,Lionel Seinturier.Foundations of AOP for J2EE Development[M].Apress,2005.
  注:本文中所涉及到的图表、注解、公式等内容请以PDF格式阅读原文。
其他文献
摘要:Agent是人工智能及计算机软件领域内的一个新兴技术。文章探讨了Agent技术以及如何把Agent技术应用于网络教学中,以提高网络教学系统的智能性,并给出了智能Agent在网络教学系统中的应用模式与实现方法。简要分析了Agent技术给网络教育带来的优点。  关键词:Agent;网络教学;XML  中图分类号:TP18文献标识码:A文章编号:1009-3044(2007)18-31692-02
期刊
摘要:针对嵌入式SQL编程技术,本文论述了如何在PowerBulider语言中实现嵌入式SQL编程技术,详细描述了技术的原理及具体实现的细节,并给出相应的编程实例代码。  关键词:PowerBlider;嵌入式SQL;通信区;游标  中图分类号:TP311文献标识码:A文章编号:1009-3044(2007)18-31679-02  The Programming Technology of Em
期刊
摘要:喷溅动画字效果大量使用于动画片片头中,文字散乱成沙又被聚合成新的文字是吸引观众视觉的一大亮点,如果用FLASH来制作,其喷溅效果没有那么平滑,本文将介绍使用Photoshop+ImageReady的方法来简单实现。  关键词:喷溅动画字;Photoshop;ImageReady  中图分类号:TP311文献标识码:A文章编号:1009-3044(2007)18-31723-02  Photo
期刊
摘要:通过对JSF和EJB3.0技术的研究分析,提出了集成二者进行Web应用开发的几种方法,给出了实现集成的关键代码,最后分析了JSF与EJB3.0集成应用的优势及发展前景。  关键词:JSF1.2;EJB3.0;JNDI;Jboss Seam  中图分类号:TP311文献标识码:A文章编号:1009-3044(2007)18-31670-02  Study on the Integration
期刊
摘要:文章提出了一种基于DOM(文档结构模型)和网页模板的Web信息提取方法。参照DOM的定义,通过构造HTML解析树来描述网页结构。在抽取网页之前,先通过归纳网页模板来过滤网页中的噪音信息。然后,使用基于相对路径的抽取规则来进行信息抽取。最后,本文给出了归纳网页模板和抽取网页信息的实验结果。实验结果表明本文提出的归纳网页模板方法和信息抽取方法是正确的和高效的。  关键词:信息抽取;文档结构模型;
期刊
摘要:介绍了电气设计中端子排以及AutoCAD中的图元,利用AutoCAD 所提供的强大的二次开发工具AutoCAD VBA,开发了识别端子排的系统,该系统只需要少量人工辅助的方式,就能够完成端子排组缆图的设计任务,使得电气二次设计专业人员从繁琐重复的手工端子排图绘制中解脱出来。  关键词:AutoCAD VBA;端子排;图元;数据库  中图分类号:TP317文献标识码:A文章编号:1009-30
期刊
摘要:Struts为Web应用提供了现成的通用的框架,可以大大提高Web应用的开发速度。首先介绍了MVC设计模式,接着分析了Struts如何实现MVC机制,最后揭示了Struts的不足之处。  关键词:Struts;MVC;设计模式  中图分类号:TP311文献标识码:A文章编号:1009-3044(2007)18-31677-02  Struts: the Development of Web
期刊
摘要:随着互联网在社会生活各个领域的广泛应用和商业化的深入发展,现有的网络基础设施和网络服务已经难以满足和支持大规模的网络应用,如交互式远程实时教学、协同科研、数字化图书馆、虚拟实验室等。与此同时,随着网络规模的扩大,现有网络的管理和运营已经变得非常复杂,地址空间匮乏、带宽瓶颈、网络安全、数据保密、服务质量等问题变得越来越突出。本文通过对IPV6的特点、协议体系等核心技术的分析,结合在实际工作中的
期刊
摘要:关联规则挖掘向来是数据挖掘的一个重要领域,挖掘算法也层出不穷。本文在深入分析了FP树特性的基础上,改进了FP树构造过程,通过一次扫描事务数据库生成FP树。缩短了关联规则挖掘时间,提高了效率,实验验证了其有效性。  关键词:数据挖掘;关联规则;FP树  中图分类号:TP311 文献标识码:A文章编号:1009-3044(2007)18-31707-01  An Improved FP-Tree
期刊
摘要:教育城域网是教育信息化建设的重点项目,本文提出了教育城域网中教学资源的异构问题,特别是对遗留资源的异构,并利用XML和Web服务技术,结合J2EE对教学资源异构系统进行设计和实现。  关键词:教育城域网;遗留教学资源库;异构;XML;Web服务  中图分类号:TP393文献标识码:A文章编号:1009-3044(2007)18-31754-03  Implementation of Hete
期刊