1.引言
1.1研究的目的及意义
随着网络购物平台的飞速发展,网络购物平台的后台管理系统越来越受到公司的重视,一个功能强大的后台管理系统决定着整个产品的成败,我们小组将使用规范的开发方法,主流的开发技术对《卖淘乐》后台管理系统进行开发。
当前的网络购物平台正在由C/S结构向B/S结构转移,但是由于安全性等方面的因素,C/S结构的信息系统仍然占据信息管理系统的主流。逐渐地随着软件在社会各个领域的广泛应用,大量繁杂的工作得以快递、高效的完成,使人们从繁重的劳动中解脱出来,提高了工作效率和工作质量。在计算机应用的众多领域中,管理信息系统占据着十分重要的地位,它使用系统的观点,以计算机科学和现代通信技术为基础,对某一组织或机构中有关管理的数据进行收集、处理,并输出有用信息,使大量的手工劳动自动完成,避免了因人工操作带来的各种错误。
1.2系统的内容及主要工作
不同身份的管理员登录后台系统后可以拥有不同的权限,分别对商品管理,评估管理,订单管理,评价管理,会员管理,工单管理,消息管理,系统管理,授权管理等进行信息的添加删除与修改。
2.系统分析
2.1开发工具和相关技术分析
2.1.1开发工具分析
(1)IntelliJ IDEA 2019
IntelliJ IDEA2019比低版本更加具有实现功能的简便性,使编程人员易于使用。相对于更高的版本而言,IntelliJ IDEA2019 具有稳定性高,兼容性高等方面优势。而且IntelliJ IDEA2019 是一个学生免费使用的开发工具,IntelliJ IDEA2019 是一款集有多款插件的编译软件,大大减少了编码人员的重复代码。
(2)MySQL
MySQL 是一种关系型数据库管理系统。关系数据库将每个数据信息都存储于不同类型的表中,而并非把所有数据信息都放在某个大仓库里,这就大大提高了反应速度并增强了操作灵活性。现在大多数网站都在使用 MySQL 作为数据库管理数据。
(3)Microsoft Visio
大多数图形软件程序依赖于结构技能。然而,在您使用 Visio 时,以可视方式传递重要信息就像打开模板、将形状拖放到绘图中以及对即将完成的工作应用主题一样轻松。Office Visio 2010中的新增功能和增强功能使得创建 Visio 图表更为简单、快捷,令人印象更加深刻。
(4)Tomcat 服务器
Tomcat 是一个支持 JSP 和 Servlet 的轻型 Web 服务器,在世界上得到了广泛的应用。当部署 Web 应用程序时,只需在开发工具中生成 war 包并将 war 包放进webapps 目录下,它会自动进行部署,十分方便。它的免费和强大的功能特别受企业和程序员的欢迎。由于其技术高新、性能稳定、开源,Tomcat 受到许多 Java 开发者的追捧,成为最受欢迎的 Web 服务器。
2.1.2相关技术分析
(1)Servlet 技术
Servlet[1] 与前端 JSP 页面进行结合,可以通过表单提交传值到 Servlet 或者通过连接地址传值来进行数据互动。一个 Servlet 就是 Java 编程语言中的一个类,它被用来扩展服务器的性能,在服务器上驻留了所有能够通过“请求-响应”编程模型来访问的应用程序。
(2)B/S 架构
B/S 架构(Browser/Server)也就是浏览器/服务器结构。B/S 架构有三层这一点他不同于客户机/服务器模式(C/S 架构)。使用浏览器/服务器结构的系统无须特别安装,只需要有 Web 浏览器即可使用。浏览器/服务器结构只需要设置些权限就可以实现多个用户同时访问的目的。
(3)JDBC 数据库连接技术
对于访问数据库效果最好最优秀的莫过于 JDBC[2] 数据库访问技术,他为开发软件和数据库进行合理交互提供强大的技术。
(4)MD5 数据加密处理
MD5[3] 在 MD4、MD3、MD2 的基础上进行了改进,提高了算法的复杂度和加密程度。由于其通用性、稳定性和速度,MD5 算法仍被广泛应用于普通数据的加密和保护领域。
2.2可行性分析
2.2.1技术可行性分析
使用到JDBC[4](Druid,commons-dbutils),Servlet,JQuery[5],Ajax[6],MySql等技术;开发整个项目需要用到的技术不是新技术,小组成员已对这些技术有过学习或实践,小组成员可以在项目开发过程中使用自己熟悉的技术对项目进行开发,也可以使小组成员对这些技术有更深入的了解。
2.2.2经济可行性分析
开发需求较低,加上成熟的软硬件环境、目标系统并不是十分复杂和开发周期较短,不需要人工支出。开发完成运行后,可以对《卖淘乐》购物平台进行便捷的维护,为系统的进一步推广创造了条件。从经济角度考虑,此系统开发可行。
2.2.2操作可行性
在操作方面使用的 B/S 架构来实现《卖淘乐》后台管理系统,浏览器/服务器结构具有操作便利的特点,删除了繁琐的更新操作。只需要浏览器与网络就可以进行使用,不再强制用户进行更新客户端操作。
2.3系统需求分析
2.3.1系统工作流程分析
本系统主要侧重于对一个购物平台的后台管理。本系统也有有一个超级管理员,用于对管理员进行管理。在该系统中管理员可以进行登录后台管理界面,进行商品的分类管理,以及对权限的管理,管理员可以根据不同用户对他们分别授予不同的权限。不同的用户所拥有的权限不同,则访问的菜单列表也有所不同。
2.3.2系统功能需求分析
后台界面为管理员服务主要功能有:
登录:管理员进入后台界面后,在未登录账号时不能查看商城相关信息。点击登录按钮然后进入管理员登录界面,登录成功后则可在后台浏览商城详情并能够执行相应的管理操作。
管理角色:管理员可以对角色进行分类,并对不同的角色授予不同的权限,并对角色进行增删改查。
管理管理员:此功能是针对超级管理员,超级管理员可以对普通管理员进行增删改查。
管理品牌:管理员可以对商城已经上架的商品的信息做出整改或对其进行下架。
管理菜单:管理员可以对某一菜单进行管理,并对不同的菜单进行是否停用和启用。
退出登录:当管理员点击退出登录按钮后,会退回到未登录的状态。
图2.1超级管理员用例图
图2.2普通管理员用例图
图2.3业务员用例图
3.系统设计
3.1功能整体结构设计
项目功能模块图:列出系统的功能,并建立起功能之间的层次关系。如下图3.1所示:
图3.1 管理员功能模块图
3.2数据库设计
3.2.1数据库需求分析
本课程设计为模拟的《卖淘乐》后台信息管理系统,方便对该二手交易平台的各种数据信息进行管理和维护。经过充分的调研,确定本系统应对管理员基本信息、登录角色基本信息、菜单基本信息、管理员-角色基本信息、角色-菜单基本信息进行管理,本系统主要要求为:
- 能够全面的管理管理员基本信息、登录角色基本信息、菜单基本信息。
- 本系统可以方便维护各种信息。
- 本系统能够方便查询各个信息表的基本信息。
- 能够方便实现多个信息表的连接查询、嵌套查询。
- 本系统能够实现有用信息的查询统计。
- 本系统能够实现有用信息的输出
(1)功能需求
《卖淘乐》后台管理系统是管理信息信息的重要工具,商城信息管理涉及管理员信息、登录角色信息、菜单信息等多种数据[7]管理。
(2)数据需求
动态数据,输入数据:点击提交按钮时上传的数据;查询时所输入的关键字;点击增加、删除和修改时所上传的数据;录入和修改时所上传的数据;点击功能按钮时所上传的数据;输出数据:查询关键字确定的数据库记录的子集;管理员信息、登录角色信息、菜单信息、等操作结果。
(3)数据字典
数据字典是指对数据的数据项、数据结构、数据流、数据存储、处理逻辑、外部实体等五个部分进行定义和描述,其目的是对数据流程图中的各个元素做出详细的说明。本次实验主要对数据字典的数据项进行分析。如表3.1所示:
表3.1数据项
序号 | 数据项 | 数据类型 | 长度 |
1 | mgr_id | varchar | 8 |
2 | login_name | varchar | 40 |
3 | login_pwd | varchar | 32 |
4 | mgr_name | varchar | 20 |
5 | mgr_gender | char | 2 |
6 | mgr_tel | char | 11 |
7 | mgr_email | varchar | 50 |
8 | mgr_qq | varchar | 11 |
9 | create_time | timestamp | 0 |
10 | menu_id | int | 0 |
11 | menu_code | varchar | 4 |
13 | menu_name | varchar | 20 |
14 | menu_order | int | 0 |
15 | menu_level | int | 0 |
16 | menu_icon | varchar | 100 |
17 | parent_menu_code | varchar | 4 |
19 | role_id | int | 0 |
20 | role_name | varchar | 20 |
21 | role_desc | varchar | 100 |
3.2.1数据库概念结构设计
管理员的实体属性,主要包括管理员的管理员编号,登录名,登录密码,性别,电话,邮件,qq号,创建时间。如图3.2 管理员实体属性图所示:
图3.2 管理员实体属性图
菜单的实体属性,主要包括菜单的菜单编号,菜单号码,菜单名,菜单序列,菜单级别,菜单图标,父级菜单号码,菜单链接,菜单状态;如图3.3 菜单实体属性图所示:
图3.3 菜单实体属性图
登录角色的实体属性,主要包括登录角色的角色编号,姓名,描述。如图3.4登录角色实体属性图所示:
图3.4 登录角色实体属性图
《卖淘乐》系统登录局部E-R图
如图3.7局部E-R图所示:
图3.7 局部E-R图
3.2.2数据库逻辑结构设计
实体转换为关系模式:
管理员(管理员编号,登录名,登录密码,姓名,性别,电话,邮件,qq号,创建时间)
登录角色(登录角色,姓名,描述)
菜单(菜单编号,菜单号码,菜单名,菜单序列,菜单级别,菜单图标,父级菜单号码,菜单链接,菜单状态)
关系模式的优化,这样得到优化的关系模式:
管理员(管理员编号,登录名,登录密码,性别,电话,邮件,qq号,创建时间)
登录角色(角色编号,姓名,描述)
菜单(菜单编号,菜单号码,菜单名,菜单序列,菜单级别,菜单图标,父级菜单号码,菜单链接,菜单状态)
对于N对M的关系模式,可以生成新的模式:
管理员-角色(管理员编号,角色编号)
角色-菜单(角色编号,菜单编号)
3.2.3数据库物理结构设计
对于优化后的关系模式分析,关系模式的每个关系都是不可再分的原子值,即为第一范式,又因为每个非主属性都不传递依赖于模式的候选键,因此该模式集为第三范式。
通过优化后关系模式得出管理员表如下表3.2:
表3.2 管理员基本信息表
字段名 | 数据类型 | 字段大小 | 是否允许为空 | 备注 |
mgr_id | varchar | 8 | NOT | 主键 |
login_name | varchar | 40 | NOT | |
login_pwd | varchar | 32 | NOT | |
mgr_name | varchar | 20 | NOT | |
mgr_gender | char | 2 | NOT | |
mgr_tel | char | 11 | NOT | |
mgr_email | varchar | 50 | NOT | |
mgr_qq | varchar | 11 | NOT | |
create_time | timestamp | 0 | Null |
通过优化后关系模式得出管理员-角色表如下表3.3:
表3.3 管理员-角色基本信息表
列名 | 数据类型 | 字段大小 | 是否允许为空 | 备注 |
mgr_id | char | 8 | NOT | 主键、外键 |
role_id` | int | 0 | NOT | 主键、外键 |
通过优化后关系模式得出菜单表如下表3.4:
表3.4菜单基本信息表
列名 | 数据类型 | 字段大小 | 是否允许为空 | 备注 |
menu_id | int | 0 | NOT | 主键 |
menu_code | varchar | 4 | NOT | |
menu_name | varchar | 20 | NOT | |
menu_order | int | 0 | YES | |
menu_level | int | 0 | YES | |
menu_icon | varchar | 100 | YES | |
parent_menu_code | varchar | 4 | YES | |
menu_url` varchar | varchar | 100 | YES | |
menu_state | Int | 0 | YES |
通过优化后关系模式得出登录角色表如下表3.5:
表3.5 登录角色基本信息表
列名 | 数据类型 | 字段大小 | 是否允许为空 | 备注 |
role_id | int | 0 | NOT | 主键 |
role_name | varchar | 20 | NOT | |
role_desc | varchar | 100 | NOT |
通过优化后关系模式得出角色-菜单表如下表3.6:
表3.6 角色-菜单基本信息表
列名 | 数据类型 | 字段大小 | 是否允许为空 | 备注 |
role_id | Int | 0 | NOT | 主键、外键 |
menu_id | Int | 0 | NOT | 主键、外键 |
3.3系统功能模块设计
3.3.1管理员登录实现流程设计
1.进入系统显示登录页面,管理员输入账号、密码点击登录按钮进⾏提交;
2.账号和密码提交到ManagerLoginServlet类,在ManagerLoginServlet中接收账号和密码,调用ManagerService验证账号和密码是否正确;
3.ManagerService先调用ManagerDAO中的⽅法,根据管理员名称查询管理员信息,将查询结果返回给ManagerService;
4.在ManagerService中,如果ManagerDAO返回的信息为空,则表示根据用户输入的管理员登录账号没有查询到管理员信息(账号不存在),就返回给ManagerLoginServlet⼀个null值;如果ManagerDAO返回的信息不为空,表示管理员账号是正确的,然后校验输入的密码与查询的管理员信息密码是否⼀致;如果密码不⼀致,则返回给ManagerLoginServlet⼀个null值;如果密码⼀致,则返回给ManagerLoginServlet管理员对象;
5. ManagerLoginServlet接收ManagerService返回的验证结果:
如果返回的是null,则表示账号或者密码错误,转发到login.jsp并提示 ;
如果返回的管理员对象,则表示账号和密码都正确,将管理员信息存放到session中,跳转到index.jsp。
3.3.2登录认证过滤器
1.管理员登录成功后,将管理员信息存储到session中。
2.创建登录过滤器拦截所有用户请求,然后在doFilter方法中写登录过滤器的拦截规则。
3.3.3密码的加盐加密
1.为了保证用户信息的安全性,防止黑客进入攻破数据库后得到用户完全透明的密码,在数据库中对用户密码进行加密。
2.加密后的密码数据从明文转换成密文,并以密文的方式存储在用户信息的密码字段。
3.当黑客攻破数据库后得到密码转换的密文,并在登录页面输入密码的密文是不能成功登录的,如果想成功登录只能输入密码的明文。
4.密码的明文转换成密文,和密文转换成明文都是根据加密规则进行转换的。
5.对称加密:明文按照一定规则加密成密文,这个密文可以按照对应的规则解密成明文。(隐患:当黑客知道加密规则后就可以解密,如base64)
6.非对称加密:明文按照一定规则加密成密文,密文没有对应的规则解密成明文。(加密后的明文是不能解密的,如MD5[8]),但现在网上已经有了非对称加密的加密解密网址,如果黑客到的用户的密码的密文在该网站上输入密文,就可以得到该密码的明文(理论上加密后的明文是不能解密的,但这些网站通过穷举法就可以解密,底层原理十分复杂,规避方法为设置用户密码时不能为纯数字,或者对加密后的密文进行再次加密,但不能保证完全规避)。
7.为了有效应对黑客通过穷举法破解非对称加密,对用户输入的明文进行加盐后,再进行非对称加密操作。
8.加盐是在用户输入密码明文后进行,对密码明文的前面后面或者中间某个位置加入自定义的字符串,然后通过非对称加密加密技术(MD5)进行加密,得到的密文存储到数据库中,这样即使黑客攻破了数据库拿到了加密后的密文,并对密文通过穷举法进行转换,转换后也得不到正确的密文,而是得到用户密码和加盐后的字符串(还是建议密码不是纯数字)。
3.3.4主页菜单的加载显示功能
1.数据库操作:根据管理员的ID查询当前管理员的菜单,涉及的数据表如下:
管理员信息表 :tb_managers;
管理员角色关联表:tb_mgr_role;
角色表:tb_roles;
角色菜单关联表:tb_role_menu;
菜单表:tb_menus;
2.实体类
创建实体类封装查询的菜单信息;
二级菜单实体类 Menu2;
一级菜单实体类 Menu1;
3.JDBC操作
实现菜单的数据库操作;
根据管理员ID查询对应的一级菜单;
根据管理员ID及一级菜单ID,查询此管理员在这个一级菜单下拥有的二级菜单;
功能流程
(1)创建MenuService类;
(2)在Servlets中创建 IndexServlet;
(3)在ManagerLoginServlet中,登录成功之后重定向到IndexServlet;
(4)在 IndexServlet 根据管理员ID查询菜单集合,并传递到index.jsp;
(5)在 index.jsp 通过JSTL+EL显示菜单树;
3.3.5 菜单信息管理
对于一个系统而言,系统功能是由程序员进⾏开发和实现的,菜单相对⽐较固定的;如果要新增一个菜单,则需要有对应的功能支撑,因此对于菜单的添加操作不会让管理员来实现,而是由程序员实现的。因此在《卖淘乐后台管理系统》中,菜单信息管理功能主要就是对菜单的展示。
1.数据库操作代码实现;
(1)查询所有的一级菜单。
(2)查询所有的二级级菜单。
根据一级菜单查询所有的二级级菜单。
2.在MenuService中实现两个业务;
(1)查询所有一级菜单和二级菜单。
(2)根据一级菜单查询二级菜单。
3.一级菜单列表显示;
(1)创建 MenuListServlet 类。
(2)点击【菜单管理】跳转到 MenuListServlet ,因为菜单是从数据库加载的,修改【菜单管理】的跳转路径应该要到数据库tb_menus进⾏修改。
(3)在 MenuListServlet 类查询菜单信息,传递到 admin_menu_list.jsp 页面。
4.二级菜单联动显示;
(1)当点击一级菜单,异步请求二级菜单联动显示。
(2)创建Menu2ListByMenu1Servlet类。
(3)点击admin_menu_list.jsp 页面中的一级菜单,触发AJax请求,请求Menu2ListByMenu1Servlet。
(4)在Menu2ListByMenu1Servlet类中接收ajax请求,并且根据一级菜单查询二级菜单,然后以JSON格式响应ajax请求。
(5)将ajax得到的响应数据,二级菜单显示出来。
5.菜单的启用和停用;
权限/菜单的启用与停用功能,指的是当系统管理员禁用了某个菜单之后,即使拥有这个权限的用户也不能进⾏此操作了,修改tb_menus数据表增加menu_state字段以支持启用停用功能。
(1)增加menu2实体类中menuState属性。
(2)修改MenuDao和MenuService中查询Menu2的方法。
(3)在admin_menu_list.jsp 页面显示二级菜单时,同时显示其对应的状态。
(4)全部菜单中二级菜单的状态发生变化,相应的点击一级菜单所出现的二级菜单的条目的状态也应该发生变化。
3.3.6 角色权限管理
1.查询角色信息
(1)角色信息列表显示是通过点击角色管理[9]菜单,调用RoleServlet,在该Servlet中调用RoleService查询角色列表,Service页面又通过RoleDAO查询角色集合。将所查询到的结果返回给RoleServlet[10]。将角色列表传递给admin_role_list.jsp。
(2)将数据库访问操作放在RoleDAO类中。
(3)在admin_role_list.jsp中使用JSTL和EL表达式。
2.添加角色信息
(1)在admin_role_list.jsp页面中,通过点击添加新角色,跳转到MenuListAllServlet页面,在该页面中调用MenuService中的方法,用于显示查询到的所有一级菜单以及每个一级菜单所对应的二级菜单。在Sevice中调用MenuDAO,在该页面中查询一级菜单以及所对应的二级菜单。
(2)若想实现添加功能,则需要在admin_role_add.jsp页面通过点击提交按钮,传递到RoleAddServlet页面,进行接受提交的角色信息,并调用RoleService保存角色信息,RoleService通过调用RoleDAO来保存角色信息以及角色和菜单之间的关联关系。
3.删除角色信息
(1)首先在角色列表页面点删除按钮,跳转到RoleDeleteServlet页面中接受要删除的角色ID,并调用RoleService页面执行删除功能,在RoleService页面调用RoleDAO,从tb_role_menu表中删除角色与菜单之间的关联关系,从tb_roles表中删除角色信息。
(2)删除成功后,不在跳转到提示页面,而是使用异步请求,使用Ajax在本页面进行提示。
(3)在admin_role_list.jsp页面中选择多个角色信息,进行批量删除,在RoleMultiDeleteServlet页面中,接收要删除的多个角色的ID,并调用RoleService中的deleteRole()方法,进行循环遍历删除,在调用RoleDAO中的selectRoles()方法,进行查询所有的角色信息,并显示在列表页面上。
4.修改角色信息
(1)首先在admin_role_list.jsp页面点击修改按钮,会自动传递一个角色ID到RoleQueryServlet页面中,在页面用于接收角色ID并根据角色ID查询角色信息以及角色所拥有的角色菜单,这些数据是通过RoleService和RoleDAO进行获取,并将获取到的数据回显到admin_role_modify.jsp。
(2)在admin_role_modify.jsp页面点击保存修改按钮,将所修改的角色信息和菜单ID传递到RoleUpdateServlet中,RoleUpdateServlet通过调用RoleService和RoleDAO对角色信息以及角色所拥有的权限进行修改。并将提示信息进行显示。
3.3.7管理员列表管理
作为系统管理员可,以对后台管理系统中的管理员用户信息进行维护。
1.管理员列表业务流程;
(1)创建管理员实体类。
(2)在ManagerDAO类中实现数据库操作。
(3)在ManagerService中进行业务逻辑层实现,增加查询管理员的方法,返回一个List集合。
(4)admin_manager_list.html页面修改为admin_manager_list.jsp。
(5)在admin_manager_list.jsp页面使用JST+EL显示角色列表列表及所有管理员信息列表。
2.添加管理员业务流程;
(1)当点击添加管理员按钮,在弹出的div层中显示管理员角色列表。
(2)进入到admin_manager_list.jsp页面时,将角色列表渲染到隐藏的div中。
(3)创建ManagerAddServlet类。
(4)在admin_manager_list.jsp页面点击弹窗中的【提交】按钮,将输入的管理员提交到ManagerAddServlet类。
(5)在ManagerAddServlet类中,接收管理员信息并保存,查询管理员列表、角色列表返回到admin_manager_list.jsp页面。
(6)回到admin_manager_list.jsp页面之后显示提示提示信息。
3. 删除管理员业务流程;
(1)创建ManagerDeleteServlet类。
(2)在管理员页面点击删除后,通过ajax请ManagerDeleteServlet。
(3)在ManagerDeleteServlet类中接收id执行删除-响应结果。
4. 修改管理员业务流程;
修改管理员数据库操作实现:
(1)根据管理员ID查询管理员。
(2)根据管理员ID修改管理员信息。
修改管理员业务逻辑实现;
- 在ManagerQueryServlet和ManagerUpdateServlet。
- 在admin_manager_list.jsp页面点击【编辑按钮】,触发js执行,弹出修改弹窗。
3.3.8分类管理
1.添加分类功能设计
category_add.html文件转换成category_add.jsp;在category_list.jsp文件页面点击【添加分类】按钮跳转到category_add..jsp;创建CategoryAddServlet类;在category_add.jsp通过表单提交分类信息到CategoryAddServlet类;在CategoryAddServlet类接收并保存分类信息(注意:图片上传);在category_list.jsp显示添加之后的提示信息。
2.删除分类功能设计
创建CategoryDeleteServlet;在category_list.jsp中点击【删除】按钮,触发JS操作,发送ajax请求到CategoryDeleteServlet类;在CategoryDeleteServlet类中接收要删除的分类ID,执行并响应ajax请求删除操作结果;创建响应ajax的vo类:ResultVO。
3.修改分类功能设计
创建CategoryUpdateServlet类;在category_list.jsp点击【修改】按钮,将要修改的分类的ID传递到CategoryQueryServlet类;在CategoryQueryServlet类中接收分类的ID并查询分类信息传到修改页面;创建category_modify.jsp页面,接收并显示分类的原始信息,进行修改之后【提交保存】,将修改后的信息提交到CategoryUpdateServlet类;创建CategoryUpdateServlet类,接收修改后的信息,并执行修改。
4.系统实现
4.1《卖淘乐》后台管理系统功能实现
4.1.1用户登录功能的实现
用户登录功能,主要采用mvc三层架构开发方法。进⼊系统显示登录页面,管理员输⼊账号、密码点击登录按钮进⾏提交;账号和密码提交到ManagerLoginServlet类,在ManagerLoginServlet中接收账号和密码ManagerService验证账号和密码是否正确; ManagerService先调⽤ManagerDAO中的⽅法,根据管理员名称查询管理员信息,将查询结果返回给ManagerService;在ManagerService中,如果ManagerDAO返回的信息为空,则表示根据用户输⼊的管理员登录账号没有查询到管理员信息(账号不存在),就返回给ManagerLoginServlet⼀个null值;如果ManagerDAO返回的信息不为空,表示管理员账号是正确的,然后校验输⼊的密码与查询的管理员信息密码是否⼀致;如果密码不⼀致,则返回给ManagerLoginServlet⼀个null值;如果密码⼀致,则返回给ManagerLoginServlet管理员对象;登录验证如图4.1至图4.3所示。
图4.1管理员登录图
图4.2登录成功图
图4.3登录失败图
4.1.2主页菜单的加载显示功能
根据管理员的ID查询当前管理员进入主页后所能看到的菜单列表。通过五表关联查询管理员信息表tb_managers,管理员角色关联表tb_mgr_role,角色表tb_roles,角色菜单关联表tb_role_menu,菜单表tb_menus,查询到该管理员的ID所对应的身份ID,当前身份ID所对应的菜单ID,这是一种基于角色访问控制的方法。在ManagerLoginServlet中,登录成功之后重定向到IndexServlet;在 IndexServlet 根据管理员ID查询菜单集合,并传递到index.jsp。如图4.4至图4.6所示。
图4.4超级管理员主页面
图4.5普通管理员主页面
图4.6业务员主页面
4.1.3菜单的启用和停用
权限/菜单的启用与停用功能,指的是当系统管理员禁用了某个菜单之后,即使拥有这个权限的用户也不能进⾏此操作了,修改tb_menus数据表增加menu_state字段以支持启用停用功能。如图4.7至4.8所示。
图4.7菜单选项全部启用图
图4.8菜单选项部分禁用图
4.1.4角色权限管理
角色信息列表显示是通过点击角色管理菜单,调用RoleServlet,在该Servlet中调用RoleService查询角色列表,Service页面又通过RoleDAO查询角色集合。将所查询到的结果返回给RoleServlet。将角色列表传递给admin_role_list.jsp。将数据库访问操作放在RoleDAO类中。在admin_role_list.jsp中使用JSTL和EL表达式。如图4.9至4.12所示。
图4.9角色查询图
图4.10角色添加图
图4.11角色添加成功图
图4.12角色删除图
图4.13角色删除成功图
图4.14角色修改成功图
5.系统测试
5.1测试方法
目前,有很多软件测试的方法。常见的方法有等价类划分法、情景法、边值法和决策表法。其中,等价类划分、边值分析和决策表均属于黑盒测试方法。它只检测功能上是否符合要求,主要进行在软件的确认测试阶段。本设计从系统的外部功能结构着手,采用黑盒测试,以检验系统界面、系统功能、是否合理有效。黑盒测试的特点是测试人员不必知晓系统的内部代码和相关逻辑,而只需要在程序界面上测试程序是否能正确的接收输入数据,然后正确的输出数据。为《卖淘乐》后台管理制定测试用例,此处采用黑盒测试中的等价类划分法。
5.2测试用例与结果
(1)管理员登录测试用例表,如表5.1所示
表 5.1管理员登录测试用例表
用例编号 | 操作 | 输入数据 | 预期结果 | 实际结果 | 测试状态 |
01 | 输入正确用户名 输入正确密码 验证码正确 | 用户名:admin 密码:123456 | 正常登录 | 登录成功,并跳转相应页面 | Pass |
02 | 用户名为空 密码为空 验证码为空 | 用户名: 密码: | 登录失败 | 提示用户名不能为空 | Pass |
03 | 用户名不为空 密码为空 验证码为空 | 用户名:admin 密码: | 登录失败 | 提示登录密码不能为空 | Pass |
04 | 用户名不为空 密码不为空 验证码为空 | 用户名:admin 密码:123456 | 登录失败 | 提示验证码不能为空 | Pass |
05 | 用户名错误 密码正确 验证码正确 | 用户名:123 密码:123456 | 登录失败 | 提示登录失败,用户名或密码错误 | Pass |
06 | 用户名正确 密码错误 验证码正确 | 用户名:admin 密码:123 | 登录失败 | 提示登录失败,用户名或密码错误 | Pass |
07 | 用户名正确 密码正确 验证码错误 | 用户名:admin 密码123456 | 登录失败 | 提示登录失败,验证码错误 | Pass |
- 添加角色信息测试用例表,如表5.2所示:
表5.2添加角色信息测试用例表
用例编号 | 操作 | 输入数据 | 预期结果 | 实际结果 | 测试状态 |
01 | 角色名称为空 角色描述不为空 | 角色名称: 角色描述:管理商品的业务员 | 添加失败 | 提示角色名称不能为空 | Pass |
02 | 角色名称不为空 角色描述为空 | 角色名称:业务员 角色描述: | 添加失败 | 提示角色描述不能为空 | Pass |
03 | 角色名称不为空 角色描述不为空 | 角色名称:业务员 角色描述:管理商品的业务员 | 添加成功 | 提示信息添加成功 | Pass |
(3)修改角色信息测试用例表,如表5.3所示:
表5.3修改角色信息测试用例表
用例编号 | 操作 | 输入数据 | 预期结果 | 实际结果 | 测试状态 |
01 | 修改角色名称为空 | 角色名称: | 修改失败 | 提示所修改的用户名称不能为空 | Pass |
02 | 修改角色描述为空 | 角色描述: | 修改失败 | 提示所修改的角色描述不能为空 | Pass |
03 | 按要求修改角色信息 | 角色名称:管理员 角色描述:管理角色 | 修改成功 | 提示修改信息成功 | Pass |
(4)删除角色信息测试用例表,如表5.4所示:
表5.4删除角色信息测试用例表
用例编号 | 操作 | 输入数据 | 预期结果 | 实际结果 | 测试状态 |
01 | 点击批量删除 | 未选择删除的角色 | 删除失败 | 提示请选择所要删除的角色 | Pass |
02 | 点击批量删除 | 选择所要删除的角色 | 删除成功 | 提示删除角色成功 | Pass |
5.3测试分析
首先输入验证码,判断验证码是否正确,验证码验证成功之后开始验证用户名、密码是否正确,正确即可登录,进入首页面。否则,登录失败。
若验证码为空,用户名密码正确不进入数据库验证层面,直接提示验证码不能为空。
参考文献
[1]杨晟,罗奇.基于RBAC的通用权限管理系统设计[J].科技创新与应用,2022,12(09):123-126.DOI:10.19981/j.CN23-1581/G3.2022.09.029.
[2]周公平.基于jQuery框架的Web前端开发设计方法研究[J].信息与电脑(理论版),2022,34(05):128-130.
[3]唐小玲.基于AJAX异步交互技术的门户网站构建[J].电脑知识与技术,2021,17(32):165-166.DOI:10.14004/j.cnki.ckt.2021.3256.
[4]李强,陈登峰.改进MD5加密算法在系统密码存储中的研究及应用[J].信息记录材料,2021,22(10):157-159.DOI:10.16009/j.cnki.cn13-1295/tq.2021.10.075.
[5]丁佩佩.基于JSP/Servlet技术的电商平台开发技术研究[J].科技视界,2021(18):99-100.DOI:10.19694/j.cnki.issn2095-2457.2021.18.38.
[6]刘震林,喻春梅.基于MVC模式的JAVA Web开发与实践应用研究[J].网络安全技术与应用,2021(01):57-58.
[7]王艳梅.jQuery在AJAX技术框架中页面加载的应用分析[J].电脑知识与技术,2020,16(36):210-212.DOI:10.14004/j.cnki.ckt.2020.3743.
[8]刘翠霞.Java数据库连接池的原理与应用[J].无线互联科技,2020,17(04):167-168.
[9]李光明,房靖力.基于JavaWeb的推荐数据后台管理系统的设计与实现[J].电脑知识与技术,2020,16(03):66-68.DOI:10.14004/j.cnki.ckt.2020.0280.
[10]陆英.Web前端密码加密是否有意义[J].计算机与网络,2019,45(03):50.