基于STRUTS的权限管理系统研究与实现

时间:2022-10-27 03:22:09

基于STRUTS的权限管理系统研究与实现

摘要:本文介绍了Struts的一些特点,阐述了三种常用的访问控制的方法,说明了基于Struts权限管理系统的基本原理和实现的技术。

关键词:Struts;权限;角色;用户;资源

中图分类号:TP311文献标识码:A文章编号:1009-3044(2008)10-20ppp-0c

The Research and Implementation of STRUTS-based Privilege Management System

JIANG Shuang-lin

(Suzhou Art & Design Technology Insitute, Suzhou 215000, China)

Abstract: This paper introduces some characteristics of Struts, and illustrates three methods to access control.The STRUTS-basedprivilege management system's basic principle and technology of implementation are proposed.

Key words: Struts;Permission;Role;User;Resource

1 引言

进入到21世纪,随着网络的迅速发展,对电子商务,电子政务和各种网络应用系统有越来越高的要求,不仅能更充分地共享资源,同时更要求保护系统资源不受侵犯,更需要为适当的访问者提供更合理的服务,要求系统必须要能够控制:哪些访问者能够访问系统的信息,访问者访问的是“什么信息”,访问者对他所访问的数据拥有什么样的“权限”,这就涉及到网络安全的重要内容:访问控制。访问控制是网络安全防范和保护的主要核心策略,它的主要任务是保证网络资源不被非法使用和访问。本文首先介绍了访问控制的一些方法,然后是Struts的介绍,最后阐述本系统的设计与实现等。

2 访问控制

访问控制技术是由美国国防部(Department of Defense, DoD)资助的研究和开发成果演变而来的。这一研究导致两种基本类型访问控制的产生:自主访问控制(Discretionary Access Control, DAC)和强制访问控制(Mandatory Access Control, MAC)。最近几年,基于角色的访问控制(Role Based Access Control,简称RBAC)也正得到广泛的研究。

基于角色的访问控制是指在应用环境中,通过对合法的访问者进行角色认证来确定访问者在系统中对哪类信息有什么样的访问权限。系统只问用户是什么角色,而不管用户是谁。角色可以理解成为其工作涉及相同行为和责任范围内的一组人,一个访问者可以扮演多个角色,一个角色也可以包含多个访问者。角色访问控制具有以下优点:便于授权管理、便于赋予最小特权、便于根据工作需要分级、责任独立、便于文件分级管理、便于大规模实现。角色访问是一种有效而灵活的安全措施,系统管理模式明确,节约管理开销,当前流行的数据管理系统都采用了角色策略来管理权限。

3 Struts

Struts最早是作为Apache Jakarta项目的组成部分问世运作。项目的创立者希望通过对该项目的研究,改进和提高JSP、Servlet、标签库以及面向对象的技术水准。 Struts的优点主要集中体现在两个方面:Taglib和页面导航。Taglib是Struts的标记库,灵活运用,能大大提高开发效率。关于页面导航,将是今后的一个发展方向。事实上,这样做,使系统的脉络更加清晰。通过一个配置文件,即可把握整个系统各部分之间的联系,这对于后期的维护有着莫大的好处。

3.1 Struts实现MVC的机制[1]

下图显示了Struts实现的MVC框架。

3.1.1 模型(MODEL)

模型表示程序的状态和业务逻辑,通常由JavaBean或EJB来实现。

3.1.2 视图(VIEW)

视图是通过一组JSP程序实现的。这些JSP程序中不包含业务逻辑,也不包括模型的信息。模型的信息是通过控制器传递的。在Struts中ActionForm 也被看成是视图的一部分。

3.1.3 控制器(CONTROLLER)

控制器部分由ActionServlet和Action来实现。ActionServlet也就是Struts框架用来和Web容器交互的接口。该类是Struts框架的核心组件。ActionServlet继承了HttpServlet类。它在MVC模型中扮演中央控制器的角色。ActionServlet主要负责接受HTTP请求信息,根据struts-config.xml文件的配置信息选择合适Action来处理请求。并传递请求过程中的数据,这些数据是通过ActionForm传递的。Action本身也并不包含业务逻辑的处理代码,它只是负责调用业务的处理代码,调用这些代码的方法在execute()方法中。该方法在调用业务处理以后会返回一个ActionForward对象来选择对应的视图。一般而言我们的Action必须直接或间接的继承该类。然后重写excecute()方法以完成我们自己的处理消息。

3.1.4 Struts的配置文件struts-config.xml

该文件实质是一个控制器和视图的黏合剂,控制器之所以能够选择对应的视图,以及视图能够通过对应的控制器查询到模型中的数据都是依赖该文件。该文件是一个XML文件,在该配置文件中每Action都对应一个标签用来映射Action类的信息。

4 系统设计原理系统设计原理

本系统主要是受基于角色的访问控制(RBAC)原理启发来进行设计。系统的核心体现在如下的E-R中。

用户(User)[2]:权限的主体。按照RBAC理论,User拥有的权限只能通过赋予其Role,获取Role的权限,User不直接接受权限,这样和现实的职能部门相吻合,授权管理更有效、方便。

用户组(UserGroup):权限的主体。和User类似,UserGroup 不直接接受权限。UserGroup是User的集合。UserGroup可以实现继承,在创建UserGroup时指定其上级组。当某一User属于某一UserGroup时,其就拥有该UserGroup的所有权限。这样规则简单,管理容易,更便于系统大规模的权限管理。从上面E-R图可以看出,在逻辑结构上,User和UserGroup是多对多的关系,一个User可以属于不同的UserGroup,一个UserGroup可以拥有不同的User。用户组之间可以可以有上下级关系,对于用户组可以通过设置parent_id(上级组id),将上级关联起来,上、下级组之间是一对多的关系

角色(Role)[3]:拥有一定数量权限的抽象概念。在RBAC模型中Role是User、UserGroup和Permission的纽带,从上面E-R图可以看出,Role和User是多对多的关系,一个Role可以赋给多个User(例如一个部门的员工可能是同一种角色),一个User也可以拥有多个Role(例如身兼数职)。同样一个Role可以赋给多个UserGroup,一个Usergroup也可以拥有多个Role。一个Role可以拥有多个Permission,一个Permission也可以分属于多个Role中。角色的创建使用,分离了User、Usergroup和Permission,从程序设计上讲结构更加清晰,从使用者来讲更符合现实情形,管理权限更加有效,尤其是大型权限管理。

操作(Operation):操作。例如对于页面资源有访问、不可访问类型;对于按钮资源有可用、不可用等。

权限(Permission):描述对一种资源的访问能力。对受保护的资源操作的访问许可(Access Permission),是绑定在特定的资源实例上的。对应地,访问策略(Access Strategy)和资源类别相关,不同的资源类别可能采用不同的访问模式(Access Mode)。例如,页面具有能打开、不能打开的访问模式,按钮具有可用、不可用的访问模式,文本编辑框具有可编辑、不可编辑的访问模式。单纯的权限没有任何意义。权限表中的权限类型和资源类型表中的资源类型相关。所以,本系统中,新增的权限必须选择权限类型,也就是在资源类型表中确定权限类型。如果没有某一种类型的资源,也就无从建立此种类型的权限。权限产生意义,必须和具体的资源实例发生关系,就是操作权限和资源表相关联的资源权限表。

资源(Resource):资源之间存在父子关系(指定父资源id),父子之间是一对多的关系。删除父资源,子资源一并被删除。删除某一资源,除了操作资源表外,还要操作资源权限表。

资源类型(Resourcetype):资源和资源类型是多对一的关系,也即一种资源类型可有许多资源实例。当删除一个资源类型时,要删除资源表中所有该类型的资源,还要删除该权限类型的权限,更新和权限表相关联的资源权限表、用户权限表、角色权限表、用户组权限表、权限操作表。

5 系统实现概述

本系统设计采用了Struts结构,结构较为清晰,后期维护更新较为方便。系统主要实现了登陆、用户(组)、角色、权限、资源、资源类型、操作类型管理功能。在数据库设计上,设计了用户表、用户组表、角色表、权限表、操作表、资源表、资源类型表,以及它们之间的关联表(可参看图3)。由于采用了Struts结构,故需要设计视图、控制器、模型组件。在这些组件中,最核心的还是模型组件。系统中最关键的类为LoginBean、Userbean、ugbean、Rolebean、Permissionbean、Resourcebean、Operationbean、ResourceTypebean,它们实现的功能依次为:用户的登陆管理、用户组的登陆管理、角色管理、权限管理、资源管理、操作管理、资源类型管理。下面结合登陆管理和角色管理简述其实现过程。

5.1 登陆管理

在用户输入用户名和密码后,系统首先进行简单的表单验证,包括用户名、密码是否为空,一旦为空,则返回登陆界面,重新输入。当通过表单验证后,进入控制器组件loginAction中,进行更为实质的验证。loginAction调用模型组件loginBean的public boolean getTrue(String name,String password)方法来判断用户名、密码是否匹配,若匹配则进入到主页面,否则返回登陆界面。其中,loginBean的getTrue(String name,String password)方法,将访问“用户”表中的用户名和密码。在“用户”表中存放的密码,并不是明文,而是采用MD5算法加密后得到的字符串,所以在调用getTrue(String name,String password)方法前,在loginAction中将得到的明文密码,用MD5算法计算得到新的字符串,将其作为getTrue的password参数。public boolean getTrue(String name,String password)的实现方法中关键sql语句如下:

"select * from User where user_code='"+username+"' and user_password='"+pass+"'";

5.2 角色管理

角色是系统中权限的抽象集合。应用系统中的使用角色,每个角色对应着一些特定的权限。角色和用户之间是多对多的关系。一个用户可以拥有多个角色,同时一个角色也可以赋给多个用户。同样,角色和用户组也是多对多的关系。角色和权限也是多对多的关系。一个权限可能分属于多个角色,同时一个角色可以拥有多个权限。角色的应用,使得权限管理更加清晰,维护更为方便。

角色管理主要提供:查询、修改、删除、新增功能。例如:

删除角色:从表单中选择相应的角色,点按删除后,系统将删除该角色。删除了一个角色要同时更新和角色相关联的用户角色表、用户组角色表、角色权限表。模型组件Rolebean中实现该功能的重要sql为:

"delete from rel_role_user where role_id='"+id+"'"; //删除用户角色关系

"delete from rel_group_role where role_id='"+id+"'"; //删除用户组角色关系

"delete from rel_role_permission where role_id='"+id+"'"; //删除角色权限关系

"delete from Role where role_id='"+id+"'"; //删除角色

6 结束语

本权限管理系统目前已可投入使用(某省高速公路合同管理系统中以使用了本系统)。本系统以Web方式对系统中的用户(组)、资源、角色、权限等进行配置,外部Web通过系统提供的API来进行访问控制,具有一定的通用性,但是RBAC的应用,还不是很充分。

参考文献:

[1] 孙卫琴. 精通Struts:基于MVC的Java Web设计与开发[M]. 电子工业出版社,2004.8.

[2] 李兴唐. 基于角色的权限管理系统[D]. 吉林大学研究生学位论文,2004.

[3] 王鑫. 基于角色的权限系统开发与应用[D]. 西南交通大学研究生学位论文,2005.

收稿日期:2008-03-04

作者简介:姜双林(1976-),男,江苏省苏州市人,讲师,硕士,研究方向为计算机网络。

上一篇:一种基于robert算子的红外图象小目标检测算法 下一篇:一种基于稳定子码的量子LDPC码的构造