APP下载

基于Web Services改进的统一权限系统的研究与实现

2015-05-30刘玮玮黄清政

计算机时代 2015年5期

刘玮玮 黄清政

摘 要: 在改进传统权限系统不足之处的基础上,研究实现了基于Web Services技术的统一权限系统架构。采用这样的架构,可以将权限系统封装成从业务系统中独立出来SOA体系服务,为多个不同的业务系统共享,业务系统不必再关心权限方面的细节。相对于其他类似系统主要关注对数据的整合,该统一权限系统主要关注功能的整合,目的是改变目前权限管理的模式,让权限的管理更加全局化,让维护和升级更加容易。

关键词: Web Services; 统一权限; J2EE; SOA

中图分类号:TP393.07 文献标志码:A 文章编号:1006-8228(2015)05-38-03

Abstract: To improve the traditional authority system, this paper studies and implements a unified authority system architecture based on the technology of Web Services. With this architecture, the authority system can be encapsulated as a SOA service independent from the business system, a number of different business systems can share the authority system without considering the details of authority. Compared with other similar systems mainly focus on data integration, this unified authority system mainly focus on the function integration, intents to change the current authority management mode, and makes the management of authority more global, makes the maintenance and upgrading more easy.

Key words: Web Services; unified authority; J2EE; SOA

0 引言

在任何信息系统中,权限管理都处于核心地位。权限管理既要保障系统的安全,又要方便管理和使用。由于日常信息系统经常要修改功能和增加新模块,这需要和软件供应商进行沟通,常会因时间或经费的原因放弃一些很好的想法,系统也因此更新慢或长时间不更新,不能满足日益增长的需求。如OA系统、CRM系统、CRU系统、稽核系统等,这些系统中对权限控制方面的要求都非常高,特别是跟管理和财务挂钩的CRU和CRM系统,要花大量精力在权限系统的设计和开发上。

目前比较流行的权限系统架构大多数是采用代码复用和数据库结构复用的方式集成到具体的业务系统中[1],对于不同架构、不同部署环境的软件,在开发、维护、使用中都可能存在不易维护、不能支持不同平台和架构、不方便共享数据、系统安全性低等问题。如单点登录系统的应用领域主要是对已存在的多个系统之间的身份认证。主要解决在多个系统之间访问时不必多次登录的问题,即自动登录,并没有关注整个信息系统中权限的统一管理和子系统权限管理的问题。Portal系统关注的是已存在系统间信息的整合,是通过一种机制,让用户能在一个页面中集成更多系统的信息,并能在各系统之间顺利的访问[2],而不是建立一个更方便操作、易维护、易扩展的权限管理控制框架。

本文采用Web Services技术解决了这些问题,业务系统只保留权限查询和读取系统共用数据的功能,实现的系统通过两个方式向业务系统提供服务:通过Web Services向子系统提供权限查询服务;通过Web页面服务向子系统提供权限管理服务(功能登记、权限授予、权限变更等)。

1 系统的设计

1.1 权限控制的方式

统一权限系统和业务系统之间是依赖和被依赖的关系。对最终用户而言,统一权限系统和业务系统是一个整体,对业务系统程序开发员而言,他们只需要在自己的程序中调用统一权限系统客户端接口即可,并不需要知道统一权限系统是如何实现的。每个业务系统及其功能操作都必须在“统一权限系统”中注册,注册层次分为三级结构:

⑴ 系统,所有需要进行权限控制的业务系统都必须在统一权限中注册,并获得惟一的业务系统序号,本文称之为SystemID。SystemID是两位数字,其可取值范围规定为10-99。

⑵ 模块,业务系统中的所有模块都要在统一权限系统中对应的系统下注册,并获得惟一的模块序号,本文称之为ModuleID。模块是属于某个系统的。模块序号是五位数字,由两位业务系统序号和三位模块流水号组成:ModuleID=SystemID+三位流水号。

⑶ 操作,业务系统中的所有操作都要在统一权限系统中对应的模块下注册,并获得惟一的操作序号,本文称之为OprationID。操作是属于某个模块的,操作是最终节点(即树的叶子节点)。操作由语义表示其具体的功能,如“增加公告”,“修改公告”等,操作序号是八位数字,由五位模块流水号和三位流水号组成,如下:OprationID=ModuleID+三位流水号。

为使权限的维护和使用更加方便,统一权限系统中保留了一些基本权限,如浏览、增加、删除、修改、授权、统计等,基本权限的语义是不会改变的,作为系统的默认数据存储在数据库中。每个基本权限都有一个“基本权限代码”, 本文称之为BaseRightCode,比如“增加”的基本权限代码是“A”,“删除”的基本权限代码是“D”等等。

1.2 基于角色的权限管理

基于角色的访问控制方法的思想是把对用户的授权分成两部份,用角色来充当用户行驶权限的中介,用户与角色之间,以及角色与权限之间就形成了两个多对多的关系,权限配置工作是组织角色权限的工作步骤之一,只有角色具有相应的权限后,用户委派才能具有实际意义[3]。系统提供角色定义工具允许用户根据自己的需要(职权、职位以及分担的权利和责任)定义相应的角色。角色之间有相应的继承关系,当一个角色r1继承另一个角色r2时,r1就自动拥有了r2的访问权限(表示r1->r2)[4],角色继承关系提供了对已有角色的扩充和分类的手段,使定义新的角色可以在已有角色的基础上进行,扩充就是通过增加父角色的权限去定义子角色,而分类通过不同子角色继承同一父角色来体现。另外还允许多继承,即一个角色继承多个父角色,多继承体现对角色的综合能力。

系统采用口令来鉴别用户身份以达到安全保护的目的。用户的系统访问可以用访问规则表示,根据安全策略用访问规则给用户授权,一条访问规则可以写成四元组的形式(u,o,t,p),可用已有权限表示形式重新表示为(u,P)。访问控制就是要处理怎样表达和核对访问规则的问题,系统的访问控制分为模块级控制和界面元素级控制[5]。

1.3 系统权限认证流程

用户通过统一权限系统提供的单一入口登录,获得用户瘦令牌。当用户访问业务系统时,业务系统首先判断用户的瘦令牌中是否有相关的权限数据,如果有,则直接取出,如果没有,则访问统一权限系统获取权限数据,服务器在响应时,按“被请求一次,优先级就加一”的策略来改变该权限数据的优先级别,然后验证权限数据来决定是否执行操作。可以用一个三元组表示一个权限数据,如下:权限数据AuthorityData=(操作Operation,范围Range,期限Time),简写为:AD=(O,Range,T)。

对于一个角色所拥有的所有权限,可以表示为:

角色拥有的权限Role AuthorityData=(角色Role,权限数据AD[i])

简写为RAD=(Role,AD[j]),其中j为大于等于0的整数

对于一个用户所拥有的所有权限,可以表示为:

用户拥有的权限User AuthorityData=(角色Role[i],权限数据[i])

简写为UAD=(Role[i],AD[i][j]),其中i和j为大于等于0的整数

2 系统实现的关键技术

2.1 Web Services关键技术

XML Web Service是利用XML规范作为数据的标准格式,利用Web的HTTP端口作为网络信息传递的端口而制作的一种远程的处理服务程序。使用Web Service时在服务端制作信息处理服务程序,在客户端(数据接收端)制作SOAP代理程序,负责实际Web Service的调用以及数据转换[6]。WSDL (Web Services Description Language)规范是一个描述接口、语义以及Web服务为了响应请求需要经常处理的工作的XML文档,这将使简单的服务可以方便、快速地被描述和记录。

SOAP(Simple Object Access Protocol)代理程序提供客户端其他程序的调用,代理调用程序向Web Service发出数据处理请求,将Web Service传回的XML数据转换为调用程序规定的数据格式[7]。当商业用户通过UDDI找到WSDL描述文档后,可以通过 SOAP 调用所建立的Web服务中的一个或多个操作。

2.2 采用Apache Axis序列化和反序列化器

Axis是Apache组织推出的SOAP引擎,Axis项目是Apache组织著名的SOAP项目的后继项目。Axis为开发者提供了大量的序列化/反序列化器,能够满足大部分应用。

序列化/反序列化器在英文中的对应翻译是Serializer/Deserializer,一个序列化器的功能是遵循一定的映射规则和编码风格,将一种类型的JAVA对象通过某种特定的机制,转换成为XML描述的形式[8];反序列化器的功能是序列化器所做工作的逆操作,两者相辅相成,成对出现。Axis中的序列化/反序列化器采用设计范式中的工厂模式,每一个Serializer惟一对应一个SerializerFactory;每一个Deserializer惟一对应一个DeserializerFactory。一种类型的JAVA对象具体要采用哪个序列化/反序列化器需要在提供Web服务的服务器和调用Web服务的客户端分别配置。本文就是采用Axis提供的序列化/反序列化器将对象转换成XML描述的形式,在统一权限系统和业务系统之间传输。

2.3 Web+EJB组成真正的多层结构

对于统一权限系统来说,事务机制是非常必要的。如果没有事务完整性支持,系统在用户访问量变大时,就有可能发生各种不可能发生的逻辑错误。由于EJB容器对CMP实现有事务机制的缓存优化,因此CMP特别适合多个用户同时更新同一个数据源的情况,CMP这种严格的事务完整性保证多个用户同时操作一个数据记录时,能够保证性能优化和数据的完整性。EJB容器不但在单机中提供了对象池和缓存,而且可以跨服务器实现动态负载平衡,这些都无需开发者自己编写任何软件代码。

3 系统的发布与优化

很多IDE工具提供了非常方便的方法(如JBuilderX的Web Services Designer),可以图形化的将Java类或SessionBean中的方法发布成Web Services服务,当然也可以自己手工创建部署描述符来部署服务[9]。对于复杂的公用数据,如组织结构树、数据集等,可以通过Map、Collection等复杂的对象传递给业务系统,在RPC调用时,Web Services服务器端通过序列化器将Java对象序列化成XML字串,然后加入到SOAP消息中,客户端在得到结果后也通过序列化器把XML字串反序列化成一个Java对象。

将客户端程序访问Web Services所需要的基本参数放在配置文件里,业务系统只要修改其中的三个参数,即可完成与统一权限系统之间的连接。不管“统一权限系统”与业务系统是否在同一台服务器上,部署都是非常简单的。

localhost:7001<!—统一权限系统的服务器地址和端口-->

/UASWeb<!—统一权限系统的虚拟

目录名称-->

/UASWeb/services

<!—WSDL Server URL Root-->

采用统一权限系统后,独立性增强了,和业务系统的耦合度也降低了,但业务系统需要频繁地通过Web Services请求数据,这就对系统的性能提出了更高的要求。本文采取以下几个措施来提高性能。

措施之一,对角色增加类别字段,不同类型的角色拥有不同的属性,如权限的继承性,与用户的对应关系等,以适合不同子系统的需求。

措施之二,更加灵活的设置操作的作用范围,因为作用范围可以是任何一个或多个角色,而角色又是具有层级关系的树型结构,如果一个一个地选择树中的节点,是非常费时费力的,为达到最大的灵活度,在设置功能的作用范围时,在选定某个节点的同时,还要选择相对于树的方向,例如仅节点自己本身、自己及全部子节点、仅全部子节点(不包括自己)等,另外还要选择是“包含”还是“去除”这些节点。

措施之三,业务系统通过客户端访问统一权限系统,本文设计了用户权限对象UAD,如图1所示,用于在服务器和客户端之间传输用户权限数据。用户权限存放在Map中,其键为角色的ID,值为该角色所拥有的权限数据数组。

4 结束语

本文采用Web Services技术构建了“统一权限系统”,分析了所带来的新问题,并提出了相应的解决方法,使权限的统一管理变为现实。采用这样的架构,可以帮助团队理清思路,节省开发和维护成本。

目前该系统已经成功开发,并作为核心模块应用在第一证券有限公司综合信息系统中,同时为不同架构(B/S和C/S)和不同部署平台(Window和Linux)的业务系统提供服务,取得了不错的效果。这对于大型企业、金融机构,或开发自己产品的IT公司来说,都是很有应用价值的。

参考文献:

[1] 杨艳国,成立权,刘阳.统一用户权限管理系统的应用研究[J].计算机光盘软件与应用,2012.2:59-60

[2] 汪迅宝.用Portlet技术实现数字化校园信息门户设计研究[J].电脑知识与技术,2013.9(2):448-450

[3]权限系统概要(收集,整理)[EB/OL].http://www.jdon.com/7309.

[4]关于用户角色权限管理一点想法[EB/OL].http://www.jdon.com/2897.

[5] 张友生.系统分析与设计技术[M].清华大学出版社,2005.

[6] 饶元.Web Services:分布式网络体系新架构[J].计算机工程,2004.30(22):1-3

[7] W3C Recommendation. SOAP Version 1.2 Part 1: Messaging Framework(SecondEdition)[EB/OL].(2007-04-27)http://www.w3.org/TR/soap12-part1/.

[8] Apache Software Foundation. Version:1.6.2: Axis2 Architecture Guide [EB/OL].(2012-04-17)http://ws.apache.org/axis2/0_94/

Axis2ArchitectureGuide.html/.

[9] (美)阿姆斯特朗著,詹文军译.Java Web Services教程[M].电子工业出版社,2003.