首页 > 范文大全 > 正文

基于Spring+Hibernate的权限管理组件设计与实现

开篇:润墨网以专业的文秘视角,为您筛选了一篇基于Spring+Hibernate的权限管理组件设计与实现范文,如需获取更多写作素材,在线客服老师一对一协助。欢迎您的阅读与分享!

摘要:该文以作者参与开发过的OA办公自动化系统为实践背景,在分析基于角色的访问控制(RBAC)技术和Spring、Hibernate框架的基础上,对权限管理组件进行总体设计。并且在spring+hibernate框架下采用RBAC技术实现权限管理组件开发。该权限管理组件具有灵活的授权机制,高可复用性,可扩展性和易维护性。

关键词:基于角色的访问控制;组件;权限管理;Spring; Hibernate

中图分类号:TP311文献标识码:A文章编号:1009-3044(2010)18-4949-03

The Design and implement of Authority Management Component Based on Spring and Hibernate Framework

DUAN Run-ying1, CAO Ying2

(1.Dept of Information Science and Engineering, Guangzhou University Sontan College, Guangzhou 511370, China; 2.Moder Education Technology and Information Centre, Jiangxi University of Science and Technology, Ganzhou 341000, China)

Abstract: This paper is based on the OA system in which author participates in the development; it analyzes RBAC (Role-Based access control) technology, Spring and Hibernate framework. Then we designed and developed the authority management component based on Spring and Hibernate framework. This component has flexible authority, reuses highly, and has effective maintenance.

Key words: RBAC; component; authority management; Spring; Hibernate

随着办公自动化系统、信息管理系统的广泛应用,工作人员的工作效率得到了极大的提高,然而在使工作便利化和高效化的同时也产生了各种安全性问题,即如何防止信息的非法泄露、修改或破坏,同时保证系统用户在其相应的权限范围内做相应的操作。权限管理模块是系统中负责用户对资源(数据、文件等)操作权限的管理模块,权限管理组件极大的影响着系统信息安全性。传统的权限管理组件采用自主型访问控制机制或强制型访问机制,这两种访问机制都是对系统中所有的用户进行直接的权限管理、权限操作复杂授权方式不灵活,已经无法满足新系统的需求。而基于角色的访问控制(RBAC)技术可以使得授权灵活,能够满足新系统的需求。另外,在所有的办公自动化系统和信息管理系统中都涉及到权限的管理,如果我们将权限管理模块抽取出来,设计成一个可复用的组件,这将大大减少系统的开发时间,提高系统的开发效率。基于以上考虑,本文论述了采用基于角色的访问控制(RBAC)技术,在Spring+Hibernate框架下设计并实现权限管理组件。本文开发出来的权限管理组件具有授权灵活,高可复用性,可扩展性和易维护性。

1 相关技术

1.1 基于角色的访问控制

基于角色的访问控制(RBAC)是目前国际上非常流行的安全访问控制方法。在RBAC中,在用户和访问权限之间引入角色的概念,用户与特定的若干角色相关联,角色与访问权限相关联,角色可以根据实际的需求定义或取消,而且登陆到系统中的用户可以根据自己的需要来动态激活自己拥有的角色。除此之外,在RBAC中,权限之间、角色之间、权限和角色之间定义了一系列的关系,比如角色之间的继承关系,而且我们可以根据实际需求定义一些约束条件,比如:定义采购员和财务管理人员两个角色为互斥角色,则这两个角色不能分配给一个用户。

RBAC的核心如图1,它包括用户、角色、许可、会话,其中许可是对在一个或多个对象上执行操作的权限。在RBAC中,一个用户可以被赋予多个角色,一个角色也可以拥有多个权限,角色和用户、角色和权限之间是多对多的关系。通过用户与角色相关联,角色与访问权限相关联,从而实现用户与访问权限的间接关联。基于角色的访问控制通过角色的分配和取消来实现用户权限的授予和取消,并且提供角色分配规则。安全管理人员根据需要定义各种角色,并设置合适的访问权限,而用户根据其职责和资历再被指派为不同角色[1]。整个访问控制过程被分为两个部分:一、访问权限与角色相关联;二、角色与用户关联,通过这样划分实现了用户与访问权限的逻辑分离。

基于角色的访问控制可以很好的描述角色层次关系,实现最小特权原则和职权分离原则[2]。由于实现了用户与访问权限的逻辑分离,基于角色的访问控制策略极大的方便了系统中权限的管理。因此在权限管理组件中我们采用了基于角色的访问控制(RBAC)技术。

1.2 Spring框架

Spring框架是一个轻量级的J2EE架构,它是用于支持Java Bean构件运行的容器。Spring框架中,包括Spring Core包、Spring DAO包、Spring ORM包、Spring AOP包和Spring Web MVC包。其中Spring Core包是整个框架的基础,它提供了依赖注入[3](DI)技术的构件组装机制,它用XML配置文件描述构件之间的调用关系以完成构件组装;Spring DAO包提供了特定的数据访问控制工具,使得数据库访问控制和异常处理工作得到简化;ORM包则使得在系统设计中可以方便的将Hibernate集成到现有系统中;Spring AOP包提供面向方面编程(AOP)技术,方便为系统提供统一的安全管理等服务;Spring Web MVC包则提供了对模型-视图-控制器模式的Web应用程序开发的支持。

1.3 Hibernate框架

Hibernate是Java平台上一个功能全面的、开源的对象-关系映射框架。它提供了“对象―关系持久化”机制和查询服务,使用它能够实现对数据的获取、更新、事务管理,建立数据库连接池等功能。另外,Hibernate查询语言是对SQL的一个最小的OO扩展,是对象和关系世界之间的桥梁。

2 基于Spring+Hibernate的权限管理组件设计与实现

2.1 权限管理组件需求分析

每个企业的应用系统都是根据自身的特点建立起来的,其权限管理部分都有自己的不同特点,为了让权限管理组件能灵活的应用到不同企业的系统之中,必须采用灵活的授权机制,才能满足不同企业权限管理方面的需求。而基于角色的访问控制通过分配和取消角色来完成用户权限的授予和取消,实现了用户与访问权限的分离,使用RBAC技术能够实现灵活的授权机制。因此使用RBAC技术开发权限管理组件可以满足不同企业权限管理方面的需求。作为一个独立的可复用的组件,权限管理组件首先必须符合一个整体的概念或框架,其次,它应该提供一组接口和服务,可供外部应用程序使用。

2.2 基于RBAC技术的权限管理组件模型

依据上面的需求分析和责权分离、部分角色权限互斥的原则,结合图1中核心RBAC图,我们设计的权限管理组件的实现模型如图2所示。

在实现模型中对用户角色分配、角色权限分配的各个环节设置相应的限制约束(互斥角色不能分配给同一用户,互斥的权限不能指派给同一的角色,这些是在系统设计实现中就静态设定好的),从而实现了责权的分离,限制了用户不必要的访问权限,防止数据的非法泄漏和破坏。系统中的角色根据不同的企业的不同需求进行定义和设置,并且对每一个角色根据其是否具有授权职能分为管理员角色和业务角色。管理员角色可以对权限进行管理、将角色分配给用户。

2.3 权限管理组件体系结构的设计

根据2.1中的需求分析在权限管理组件中,我们采用了轻量级框架Spring+Hibernate和RBAC技术进行开发,权限管理组件的体系结构如图3所示。

底层数据库,我们采用关系数据库SQL Server2000。持久层采用Hibernate框架在关系数据库上处理数据的持久化工作。它抽象和封装了所有对数据源的访问,使我们可以将底层数据访问逻辑和业务逻辑分离开来。在该层使用Hibernate管理Java类到关系数据库的映射,实现数据的查询、更新和获取。业务层包括业务服务构件、管理构件、事务管理构件和业务对象,该层中采用轻量级框架Spring,Spring框架是基于控制反转的概念上建立起来的,提供了良好的依赖注入技术和面向方面编程,它不强制我们使用它的JDBC抽象的特性可以很好的与Hibernate整合。外部应用程序无需知道权限管理组件内部的具体实现,直接通过权限管理组件提供的接口和服务调用整合即可。这样实现了权限管理组件的可复用性。

2.4 权限管理组件数据库的设计

底层数据库作为权限管理组件的重要部件,它设计的好坏直接影响着权限管理组件。要开发出良好的权限管理组件,必须规划好它的数据库。在对数据库设计时,我们主要考虑如何组织RBAC模型中各元素之间的关系,数据的一致性,责权分离和约束条件的实现。数据库采用的是SQL Server 2000,数据库表有:user(用户表)、group(分组表)、role(角色表)、permission(权限表)、group_user(组-用户关系表)、user_role(用户-角色关系表)、group_role(分组-角色表)、role_permission(角色-权限关系表)、roleconstraint(互斥角色表)和 permicontraint(权限互斥表)。

permission表是用来存放权限相关的信息。它存储的是对什么对象具有怎样的操作权限,单独的一个对象或是一个操作都不能构成权限。

user_role表存放的是用户与角色的关联信息。用户和角色的关联必须满足一定的限制条件,比如同一个用户不能同时拥有两个互斥的角色。

role_permission表用于存放角色与权限的关联信息。角色与权限的关联也必须满足一定的权限限制条件,一个角色不能被赋予两个互斥的权限。

2.5 基于Spring+Hibernate的权限管理组件的实现

在对权限管理组件进行需求分析和总体设计基础上,我们采用Spring+Hibernate框架实现了权限管理组件。在实现的过程中我们首先建立了与数据库表相对应的业务对象:User.java、Group.java、Role.java、Permission.java、Group_user.java、User_role.java、Group_role.java、 Role_permission.java、Roleconstraint.java和Permicontraint.java,这些业务对象是持久层和业务层的基础,存放在ponent.model包中。在构造这些业务对象时,我们考虑到依赖注入和对象关系映射技术,因此对对象的每个属性都设置了相应的setter和getter方法。

在持久层中Hibernate通过XML文件来映射O/R对象,因此对于上述业务对象我们都写有一个相应的xml文件与之映射并且和业务对象同在一个包中。在这些xml文件里清楚地描述了各个业务对象间一对一、一对多、多对多的关联。另外在持久层中我们定义了与业务对象相应的数据访问对象,它们封装和抽象了对所有数据源的访问,这些数据访问对象存放在ponent.dao包中。对于数据源我们在applicationContext.xml文件中进行了配置,代码如下:

在业务层中,我们对外提供了业务服务接口,使得外部应用程序无需知道权限管理组件的内部具体实现而通过服务接口来调用权限管理组件。该层向外提供的业务服务接口如:addRole()(用于用户添加角色,在添加的过程中首先要判断将要添加的角色与用户原有的角色是否互斥,如果互斥将无法添加)、addToGroup()(将用户添加到组,首先要做冲突检查,只有用户现有角色和该用户组所拥有角色不冲突才能加入该组)、getRoles()(取得所有角色)、getGroups(User user)(取得用户所在组的集合)、getRoles(User user)(取得用户所拥有的角色)等接口。

3 结束语

随着不同企业的工作流程、工作方式的不断变化和管理信息系统的广泛应用,人们对系统的安全性,系统的扩展性维护性提出了更高的要求。传统的管理信息系统、办公系统在权限管理方面已不能满足用户的需求。论文以作者参与过的办公自动化系统为研究背景,借鉴安全访问控制方法的研究成果和己有权限管理模块的设计经验,把不同企业的办公自动化系统、管理信息系统中的权限管理模块抽取出来,作为一个独立的可复用组件来设计,并且将基于角色的访问控制(RBAC)技术应用到权限管理组件中。在对权限管理组件进行分析的基础上,给出了权限管理组件的总体设计,并且在Spring+Hibernate框架下采用RBAC技术实现了权限管理组件。采用该方案开发出来的权限管理组件具有灵活的授权方式、高可复用性、可扩展性和易维护性。

参考文献:

[1] Ferraiolo D F,Kuhn R.Role-Based access control[C]//Proceedings of the 15th National Computer Security Conference.Baltimo re,MD,1992:554-563.

[2] Sandhu R,Samarati P.Access control: principles and practice[J].IEEE Communications,1994,32(9):40-48.

[3] 胡启敏,薛锦云,钟林辉.依赖注入技术及其执行过程的形式化描述[J].燕山大学学报,2005(7).