《基于hibernate的权限管理系统》由会员分享,可在线阅读,更多相关《基于hibernate的权限管理系统(9页珍藏版)》请在金锄头文库上搜索。
1、权限管理系统一、系统功能分析 1. 系统的功能模块系统主要完成权限授予及权限验证的功能,权限授予实现某个用户对模块的某个功能的操作许可,组成权限数据库。为用户分配角色来实现授权。权限验证实现通过实现定义好的权限数据库,判断该用户是否对某个模块的某个功能具有操作权限,权限验证采用过滤器来设计,用户在应用系统中进行所有操作都需要经过这一层过滤器。系统设计包括以下 5 个模块: 人员管理:创建、更新、删除、查询人员信息、人员角色维护。 功能管理:创建、更新、删除、查询功能信息。 模块管理:创建、更新、删除、查询模块信息、模块功能维护。 角色管理:创建、更新、删除、查询角色信息、角色权限维护。 验证权
2、限:判断用户对某一个模块的操作是否合法。数字证书人员管理权 限 管 理 系 统权 限 管 理 数 据 库模块管理功能管理角色管理验证权限图 1 系统功能结构图2. 技术选型系统采用业界常用的 J2EE 框架进行组合。要求成熟稳定的系统框架以满足系统的松耦合性、扩张性和可维护性。权限管理系统采用Struts+Hibernate+Spring 三种框架组合开发。表示层和控制层框架:选择业界广泛使用而且成熟稳定的 Struts。业务逻辑层框架:选择轻量级 Spring Framework。持久层框架:选择 Hibernate。3. 系统逻辑结构分析系统采用 Struts+Hibernate+Spri
3、ng 架构进行开发。在体系结构上将系统划分为四个层次:表示层、控制层、业务层、持久层。表示层和控制层融合紧密,采用 struts 框架;持久层采用 Hibernate 框架;业务层和持久层统一使用spring 框架支撑。Struts 框架接收来自表示层请求“xxxAction.do” ,请求参数封装在“xxxForm”中,struts 依据配置信息调用控制层实例“xxxAction”的相关方法,该方法从“xxxForm”中取回请求参数,并从 Spring Bean 容器中获取业务层接口“xxxManager”的一个实例“xxxManagerImpl” 。在 Spring Bean 容器初始化“
4、xxxManagerImpl”实例时,会根据 beanid=“xxxDAO”获取对应的“xxxDAO”的一个实例,并赋值给“xxxManagerImpl”的“xxxDAO”接口。xxxManagerImpl实例会调用持久层接口“xxxDAO”实例的方法完成具体的操作,并返回操作结果。S t r u t s 框架s t r u t s - c o n f i g . x m lS p r i n g 框架a p p l i c a t i o n C o n t e x t . x m lx x x B i zx x x B i z I m p lx x x D A Ox x x D A O I
5、 m p l表示层 x x x F o r mx x x A c t i o n . d o控制层 x x x A c t i o nx x x M a n a g e r业务层 x x x M a n a g e r I m p lx x x D A O持久层 x x x D A OB a s e H i b D A O I m p l图 2 权限管理模型结构图 表示层(view):表示层主要负责在前台 JSP 页面上展示控制层提供的数据,提供操作界面,将用户的操作请求提交给控制层。 控制层(Controller):控制具体的业务流程。接受来自表示层的用户操作请求,调用业务层的接口完成用户请
6、求的处理,并将处理结果和数据保存到 request 对象中,控制流程转向表示层输出处理结果和数据。表示层和控制层结合起来开发,采用 struts 框架,控制层的配置是在 struts-config.xml 配置文件中定义的,控制层和表示层之间的接口也需要在该文件中定义。 业务层(Manager) :业务层主要负责业务模块的逻辑应用设计,采用 Spring 框架。首先需要规划业务层向控制层提供的接口,然后设计器接口的实现类,业务层接口的具体实现需要调用到已定义的 DAO 层的接口。接着在 Spring 的配置文件中配置接口与实现的关联,以及设置相关的 DAO 接口。在控制层中只需要调用业务层接口
7、就可以很方便的进行业务处理。封装业务层的业务逻辑有利于业务逻辑的独立性和可重用性。 持久层(DAO) :接受业务层的调用,完成数据的持久化工作。采用 Hibernate 技术实现,业务层和持久层都采用 Spring 框架,首先需要定义业务层与持久层之间的接口,然后在设计接口的实现,最后在 Spring 的配置文件中定义此接口关联的实现类。在业务层中调用此接口来进行数据业务的处理,而不关心此接口的具体实现类是哪个类,所有接口实现调用的内部细节全部封装在 Spring 框架中。DAO 层的数据源,以及有关数据库连接的参数都需要在 Spring 的配置文件中配置。二、数据库表结构设计1. 系统数据模
8、型权限管理系统的实体有人员、角色、模块、功能,这四个实体之间的关系是:一个人员可以具有多个角色,多个人员也可以属于同一个角色;一个模块可以有多个功能,一个功能也可以属于多个模块;一个角色对多个模块的多个功能也可以有多个权限,多个角色也可以拥有同一个权限。这四个实体之间关系如下:图 3 权限管理系统数据模型图2. 系统表设计人员信息表 staff序号 字段 描述 类型长度 主键 可空1 StaffID 编号 Int 是 否2 StaffName 名称 Varchar(50) 否 否3 StaffPwd 密码 Varchar(50) 否 否角色表 role序号 字段 描述 类型长度 主键 可空1
9、RoleID 角色 ID Int 是 否2 RoleName 角色名称 Varchar(50) 否 否3 Description 描述 Varchar(200) 否 否人员角色关系表 StaffRole序号 字段 描述 类型长度 主键 可空1 ID 唯一标识 Int 是 否2 RoleID 角色 ID Int 否 否3 StaffID 人员 ID Int 否 否模块表 Module序号 字段 描述 类型长度 主键 可空1 ModuleID 模块 ID Int 是 否2 ModuleName 模块名称 Varchar(50) 否 否3 ModuleURL 模块路径 Varchar(200) 否
10、否功能项表 Function序号 字段 描述 类型长度 主键 可空1 FunctionID 功能 ID Int 是 否2 FunctionName 功能名称 Varchar(50) 否 否3 Description 描述 Varchar(200) 否 否权限表 Auth(模块功能表)序号 字段 描述 类型长度 主键 可空1 AuthID 权限 ID Int 是 否2 ModuleID 模块 ID Int 否 否3 FunctionID 功能 ID Int 否 否角色权限表 RoleAuth序号 字段 描述 类型长度 主键 可空1 ID 唯一标识 Int 是 否2 AuthID 权限 ID In
11、t 否 否3 RoleID 角色 ID Int 否 否3. 创建 popedom(权限系统)数据库脚本create table staff(StaffID int auto_increment primary key,StaffName varchar(50) unique,StaffPwd varchar(50) not null)ENGINE=InnoDB DEFAULT CHARSET=gbk;create table role(RoleID int auto_increment primary key,RoleName varchar(50) unique,Description va
12、rchar(200) not null)ENGINE=InnoDB DEFAULT CHARSET=gbk;create table staffrole(ID int auto_increment primary key,RoleID int not null,StaffID int not null,CONSTRAINT staffrole_role_fk FOREIGN KEY (RoleID) REFERENCES role (RoleID),CONSTRAINT staffrole_staff_fk FOREIGN KEY (StaffID) REFERENCES staff (Sta
13、ffID) )ENGINE=InnoDB DEFAULT CHARSET=gbk;create table module(ModuleID int auto_increment primary key,ModuleName varchar(50) unique,ModlueURL varchar(200) not null)ENGINE=InnoDB DEFAULT CHARSET=gbk;create table function(FunctionID int auto_increment primary key,FunctionName varchar(50) unique,Descrip
14、tion varchar(200) not null)ENGINE=InnoDB DEFAULT CHARSET=gbk;create table auth(AuthID int auto_increment primary key,ModuleID int not null,FunctionID int not null,CONSTRAINT auth_module_fk FOREIGN KEY (ModuleID) REFERENCES module (ModuleID),CONSTRAINT auth_function_fk FOREIGN KEY (FunctionID) REFERE
15、NCES function (FunctionID) )ENGINE=InnoDB DEFAULT CHARSET=gbk;create table roleauth(ID int auto_increment primary key,AuthID int not null,RoleID int not null,CONSTRAINT roleauth_auth_fk FOREIGN KEY (AuthID) REFERENCES auth (AuthID),CONSTRAINT roleauth_role_fk FOREIGN KEY (RoleID) REFERENCES role (Ro
16、leID) )ENGINE=InnoDB DEFAULT CHARSET=gbk; 4. 初始化数据insert into role values(1,系统管理员,管理系统全部资源);insert into staff values(1,admin,21232F297A57A5A743894A0E4A801FC3); - admin:admin insert into module values (1,用户管理,staffAction.do),(2,角色管理,roleAction.do),(3,模块管理,moduleAction.do),(4,功能管理,functionAction.do),(5,用户角色管理,staffRoleAction.do),(6,模块功能管理,authAction.do),(7,角色权限管理,roleAuthAction.do);insert into function values (1