守听 发表于 2024-9-8 19:06:05

springboot安全在线学习平台---附源码131019


摘 要


这是接纳springboot技术,SQL Server数据库实现的一个基于网络的在线学习体系。体系具有用户登录和注册、平凡用户、课程分类、课程、购买表、课程上传等功能。在线学习是通过提供电子课件,让学生可以进行在线学习,并支持电子课件下载的操作;在线测试是对用户所掌握的知识进行测试的操作;学习论坛是提供学生与教师、学生与学生、教师与教师之间的交流平台的操作。体系的特点是具有开放性,冲破了地区和时间的限制,实时开放,自 主学习与教师引导相联合,提高了学习效率。经过测试,体系运行正常,为java 语言在线学习提供了一个较好网络平台。
关键词:安全在线学习平台;Java语言;

   Springboot secure online learning platform

Abstract


This is a network-based online learning system based on springboot technology and SQL Server database. The system has the functions of user login and registration, general user, course classification, course, purchase list, course upload and so on. Online learning is to provide electronic courseware so that students can learn online and support the downloading of electronic courseware. Online testing is the operation of testing the knowledge that users have mastered; Learning forum is an operation that provides a communication platform between students and teachers, students and students, and teachers and teachers. The system is characterized by openness, breaking the geographical and time constraints, real-time openness, and the combination of autonomous learning and teacher guidance, which improves the learning efficiency. After testing, the system runs normally, which provides a better network platform for online learning of java language.
Key words: Secure online learning platform; Java language;

   目  录

第1章 绪论
1.1 选题背景
1.2 国内外研究现状
1.3 研究方法
第2章 相干技术介绍
2.1 Myeclipse描述
2.2 Mysql描述
2.3 Tomcat描述
2.4 springboot框架介绍 5
第3章 体系分析 6
3.1 需求分析 6
3.2 可行性分析 6
3.1.1 技术可行性分析 6
3.1.2 经济可行性分析 6
3.1.3 操作可行性分析 7
3.3 性能分析 7
3.4体系操作流程
3.4.1用户登录流程
3.4.2信息添加流程 8
3.4.3信息删除流程 9
第4章 体系设计 10
4.1 体系架构设计 10
4.2开发流程设计 11
4.3数据库设计
4..3.1实体ER图
4.3.2数据表
第5章 体系实现
5.1用户功能模块
5.2管理员功能模块的实现
第6章 体系测试 32
6.1 测试目标 32
6.2 测试过程 32
6.3 测试效果 34
第7章 总结与展望 35
参考文献 36
致谢 38

    第一章  绪论

1.1选题背景

Internet是现在天下上最大的计算机互联网络,它遍布全球,将天下各地各种规模的网络连接成一个整体。作为Internet 上一种先进的,易于被人们所担当的信息检索本领,World Wide Web(简称WWW)发展非常迅速,成为现在天下上最大的信息资源宝库。据估计,现在Internet上已有上百万个Web站点,其内容范围跨越了教育科研、文化事业、金融、商业、消息出书、娱乐、体育等各个领域,其用户群非常巨大,因此,建立一个好的Web站点对于一个机构的发展非常告急。近年来,随着网络用户要求的不断提高及计算机科学的迅速发展,特别是数据库技术在 Internet 中的广泛应用,Web站点向用户提供的服务将越来越丰富,越来越人性化。
1.2国内外研究现状

新加坡教育部对安全在线教育的关注,开启了探索利用信息科技方法提拔学生学习能力的研究。在新加坡,以“信息与沟通”战略引导实施下,当局倡导安全在线学习平台参与学校教育讲授。使学生成为一个有自主学习能力以及信息交流技术的使用者。在新加坡,随着学生年级的增加,接触电脑的时机许多。甚至有许多课程都必要在电脑上完成。我国现在在“互联网+”发展的新形式下,互联网和安全教育的联合,从功能上远比传统的渠道以自身为媒介转达的信息功能强盛,可以真正实现优质安全教育讲授资源的网络化共享,远在千里之外的同砚能享受和实际中学同样的讲授标准和和课程内容。同时学生在在线安全教育平台上可根据学习的内容、学习的时机进行交错或反复使用不同的安全学习项目。可以增加学生们学习的容量,促进标准化讲授,从而可以获得精良的安全知识讲授效果。
1.3研究方法

文献分析法:网络、阅读相干主题文献,在此底子上,加以分析研究,选定研究主体、提出概念模型。
比力分析法:选取国内外有代表性的安全在线学习平台,对其结构、功能加以比力,总结其优势,明白其不足。
理论和实际相联合方法:体系研究信息管理体系(MIS)相干知识理论,在此底子上,将信息集成、信息分析理论和体系构建方法等知识引入安全在线学习平台理论研究中。
本文预计创新之处:利用发展的观点,从需求角度出发,驻足功能的完善。分析现有安全在线学习平台不足,研究综合性安全在线学习平台应具备的功能,并就如何完善我国社区安全在线学习平台提出建媾和意见。
    第二章  相干技术介绍

2.1 Myeclipse描述

我们在利用Java来开发体系时通常接纳的软件就是Myeclipse,它是用来设计Java, JavaEE的Eclipse插件的调集,采取了 Myeclipse大部分可以实现对Mysql的数据库和Javaee的研究和开发。用了Myeclipse很大的便利了开发职员,体系开发的进度也会得到一些提高。
2.2 Mysql描述
现在Mysql数据库在网络上它可以支撑许多个用户,而且也可以顺应客服机和服务器的摆设或者配置等,我们这里的服务器和客户机其实就是一种软件上的概念,并且我们使用的计算机硬件也与他们不存在逐一对应的关系。
Mysql是一款非常流行的关系型数据库管理体系,它的出现一直都是佼佼者,它不光功能非常强盛,而且使用起来非常方便,并且Mysql的跨平台能力也很好,软件开发职员非常喜欢它的这些强盛的长处。不同于其他关系型数据库,对于数据库的管理它有着本身的一套方案,通过对用户设定相应的权限和脚色来达到对数据库的管理。由此可见,Mysql是一个能够适用于吞吐量高,可靠性高,效率高的一款数据库管理软件。
长处一:Mysql中对于不同身份的用户都设定其不同的权限来完成不同的业务逻辑,这使得Mysql在安全和完备性远远超出了其他关系型数据库。
长处二:对于那些动画、图形和声音的数据范例Mysql也可以支持,这说明多数据范例Mysql也是可以支持的。
长处三:Mysql还可以做到多个平台的开发,软件开发的多种编程语言都可以实现对Mysql数据库的操作。
2.3Tomcat描述
Tomcat是一个不收费的服务器。使用场景比力适合访问量比力少的情况下。意思就是,将Tomcat安装到电脑上的时候,前端HTML页面的访问请求可以通过它进行解析。实际上,Tomcat是对Apache的扩展,但它相对于Apache却是相对独立作业的,由此可以看作它与Apache 是相对独立进程运行的。
Tomcat最开始是sun公司的戴维森进行开发应用的,经过他的努力,不断地将其变为开源的服务器。还由sun公司将其交给了Apache软件基金会。不断发展的tomcat服务器在最近的一个版本中进行了大量的重构和梳理,使其使用起来更加的方便。基于Tomcat负载均衡算法是一种开源的软件,实现方式。不必要增加额外的硬件投入,实现起来也很方便,特别适用于一般的小企业网站服务器在现在和未来一段时间的扩展。从现在的实践来看,可作为必要进行类似应用的一个参考鉴戒。
2.4 spring boot框架介绍

Spring框架是Java平台上的一种开源应用框架,提供具有控制反转特性的容器。只管Spring框架自身对编程模型没有限制,但其在Java应用中的频仍使用让它备受青睐,以至于厥后让它作为EJB(EnterpriseJavaBeans)模型的增补,甚至是替补。Spring框架为开发提供了一系列的办理方案,好比利用控制反转的核心特性,并通过依赖注入实现控制反转来实现管理对象生命周期容器化,利用面向切面编程进行声明式的事务管理,整合多种长期化技术管理数据访问,提供大量精良的Web框架方便开发等等。Spring框架具有控制反转(IOC)特性,IOC旨在方便项目维护和测试,它提供了一种通过Java的反射机制对Java对象进行统一的配置和管理的方法。Spring框架利用容器管理对象的生命周期,容器可以通过扫描XML文件或类上特定Java注解来配置对象,开发者可以通过依赖查找或依赖注入来获得对象。Spring框架具有面向切面编程(AOP)框架,SpringAOP框架基于署理模式,同时运行时可配置;AOP框架告急针对模块之间的交错关注点进行模块化。Spring框架的AOP框架仅提供基本的AOP特性,虽无法与AspectJ框架相比,但通过与AspectJ的集成,也可以满足基本需求。Spring框架下的事务管理、远程访问等功能均可以通过使用SpringAOP技术实现。Spring的事务管理框架为Java平台带来了一种抽象机制,使当地和全局事务以及嵌套事务能够与保存点一起工作,并且险些可以在Java平台的任何环境中工作。Spring集成多种事务模板,体系可以通过事务模板、XML或Java注解进行事务配置,并且事务框架集成了消息转达和缓存等功能。Spring的数据访问框架办理了开发职员在应用步伐中使用数据库时遇到的常见困难。它不光对Java:JDBC、iBATS/MyBATIs、Hibernate、Java数据对象(JDO)、ApacheOJB和ApacheCayne等所有流行的数据访问框架中提供支持,同时还可以与Spring的事务管理一起使用,为数据访问提供了机动的抽象。Spring框架最初是没有打算构建一个本身的WebMVC框架,其开发职员在开发过程中认为现有的StrutsWeb框架的出现层和请求处置惩罚层之间以及请求处置惩罚层和模型之间的分离不够,于是创建了SpringMVC。
第三章 体系分析

3.1需求分析

任何一个项目在开发研究前,都必要对研发体系本身的需求做一个认真的分析,市场的调研是不可忽视的,从实际场景中确定使用职员的功能需求,从而明白目标,对整个体系的开发有一个更加正确的定位,在这个章节,必要对体系的性能分析,业务流程分析,和数据等进行分析,安全在线学习平台的整体界面简朴,功能完善。
需求的可行性是分析和讨论发达的体系能达到什么样的要求。开发的体系平台是否符合之前的要求。只有在预先评估体系的开发中,才气在体系开发和实施之前完成需求。如果您不具备开发一个功能不合格的体系的可行性,那就是开发失败。开发体系是否有用,可以完成之前讨论过的需求,以下分析了安全在线学习平台的实际需求。
体系设计必要从用户和管理员的实际需求开始,以了解他们必要实施哪些功能以及他们可以包罗哪些管理工作。
考虑到安全在线学习平台设计的特点,应满足几个要求:
(1)它可以通过网络开展安全在线学习平台管理工作,促进对安全在线学习平台信息管理。
(2)学习方法变得更加多样化,管理更加标准化;
(3)它提供了一个免费的渠道,以确保数据的实时有用沟通。
3.2可行性分析
本次设计基于B/S 模式下,运用Java技术接纳的是MySQL数据库和Myeclipse实现,总体的可行性共分为以下三个方面。
3.2.1技术可行性分析
所谓的技术可行性就是在限定时间,前期拟定的功能能否被满足。在开发设计上是否会遇上办理不了的问题。做完的项目能否被很好地应用,如果存在缺点在后期的维护上是否存在很大的难度。在对这个体系评估后,认定已存在的技术能达成目标。用Java技术来实现动态的页面,嵌入低依赖性的设计模式,机动的数据库,配合稳固的服务器,整个体系的运行效率大大提拔。由此可见,在技术层面达成目标不好坏非之想。
3.2.2经济可行性分析
在项目上使用的工具大部分都是是当下流行开源免费的,所以在开发前期,开发时用于项目标经费将会大大降低,不会让开发该软件在项目启动期受到经费的影响,所以经济上还是可行的。只管用最少的花费去满足用户的需求。省下经费用于人工费,以及设备费用。将在无纸化,高效率的蹊径上越走越远。
3.2.3操作可行性分析
本体系实现功能的操作很简朴,平凡手机的常见配置就可以运行本软件,并且只要粗通电脑使用的基本知识就可以流畅的使用本软件。手机具备连接互联网的能力,并且可以正常访问体系,并不必要操作者有什么高超的能力,只需了解业务流程,并且按照专业知识进行正确操作即可,所以安全在线学习平台具备操作可行性。
 3.3 性能分析
对于性能分析,与传统的管理方式相比,传统的管理方式是使用人工通过用纸和笔进行数据信息的统计和管理,并且这种方式对于存储和查找某一数据信息都比力麻烦,随着计算机网络的到来,这种传统的方法很难顺应当下社会的发展,不光降低人们的服务效率,而且还必要许多的人力和物力,对于使用的时间和所要花费的费用都是比力高的,为了降低资源费用,提高用户的工作效率,进行开发一套基于计算机和网络技术的安全在线学习平台。
安全在线学习平台的开发设计时一个独立的体系,以之前数据库进行数据的存储开发,告急是为了实现安全在线学习平台的用户脚色及相对应的功能模块,让安全在线学习平台的管理不会存在管理差异、低效率,而是跟传统的管理信息恰好相反,安全在线学习平台的实现可以节约资源,并且对于业务的处置惩罚速度也提高,速度快、效率高,功能性强盛。
3.4 体系操作流程

3.4.1用户登录流程
对于体系的安全性的第一关,就是用户想要进入体系,必须通过登录窗口,输入本身的登录信息才可以进行登录,用户输入的信息正确无误后才可以进入到操作体系界面,进行功能模块的相对应操作,如果用户输入的信息不正确,则窗口出现提示框,用户登录失败,返回到第一步进行重新输入,如图3-1所示。

https://i-blog.csdnimg.cn/direct/fbb1a6b9b35e45179ff2788670e52167.png
                               图3-1 用户用例图
3.4.2信息添加流程

对于安全在线学习平台,必要随时添加所必要的安全在线学习平台工作数据信息,对于用户添加信息,必要根据添加界面,根据选框的内容进行填写所要添加的安全在线学习平台工作数据信息,信息输入完成后判断数据信息是否符合要求,符合要求则添加完成,用户所添加的信息不符合要求,则必要返回到第一步,重新输入数据信息,再进行判断操作,如图3-2所示。
https://i-blog.csdnimg.cn/direct/0bfc5b38fb4d4245b94f23c9e177f1f7.png
      图3-2 信息添加流程图

3.4.3信息删除流程

不管是哪个用户脚色进入到不通的体系操作界面,都可以进行不同的信息内容的操作功能,对用体系数据信息的删除,用户一旦将信息删除,那么该删除的数据信息将无法恢复,所以用户在对数据删除事,一定判断删除的内容是否是确定要删除的,确定无误后选择确定删除操作,如图3-3所示。
https://i-blog.csdnimg.cn/direct/8f32d840661d4df3b0650921bf325f16.png
  图3-3 信息删除流程图
第四章  体系设计

4.1体系架构设计

安全在线学习平台的体系项目标概述设计分析,告急内容有安全在线学习平台的具体分析,进行数据库的是设计,数据接纳mysql数据库,并且对于体系的设计接纳比力人性化的操作设计,对于体系出现的错误信息可以实时做出处置惩罚及反馈。
基于安全在线学习平台的设计基于现有的电脑,可以实现管理员,首页、站点管理(公告栏、轮播图)用户管理(管理员)内容管理(文章、文章范例)更多管理(平凡用户、课程分类、课程、购买表、课程上传)等详细的了解及统计分析。根据体系功能需求建立的模块关系图如下图:
https://i-blog.csdnimg.cn/direct/ce17c2b08e604d8ca49249da02ffc249.png
        图4-1管理员功能模块图
基于安全在线学习平台的设计基于现有的电脑,可以实现用户,首页、公告栏、课程资讯、课程、课程上传、我的等详细的了解及统计分析。根据体系功能需求建立的模块关系图如下图:

https://i-blog.csdnimg.cn/direct/23afeb735b734fb0bb84443be9fb609e.png
            图4-2用户功能模块图
4.2开发流程设计

安全在线学习平台的开发对管理模块和体系使用的数据库进行分析,编写代开发,规划和操作是构建信息管理应用步伐的须要三步曲,它决定了体系是否能够真正实现预设功能以及是否可以在乐成设计后实施。在开发过程中,每个阶段必须严酷按照线性次序进行开发,并且在相应阶段生成的每个工作都可以通过技术进行验证和查抄。确保一个阶段完成后是正确的,不会造成下一阶段拖拽现象,使体系完成设计功能后得到保证。
从安全在线学习平台的乐成开发经验来看,上述方法效果最为显着,最大水平地降低了体系开发的复杂性。如图4-2所示。
https://i-blog.csdnimg.cn/direct/9e54f2948b8d476183bb66ae8cdb5c4e.png
         图4-2开发体系流程图

4.3数据库设计

数据库是信息体系的底子和核心。数据库设计的好坏直接影响到信息体系开发的成败。创建数据库表起首确定实体的属性和实体之间的关系。根据关系创建一个数据表。
4.3.1实体ER图

数据库是整个软件编程中最告急的一个步骤,对于数据库问题告急是判定命据库的数目和结构公式的创建。展示体系使用的是Mysql进行对数据库进行管理,进行保证数据的安全性、稳固性等。
概念模型的设计是为了抽象真实天下的信息,并对信息天下进行建模。它是数据库设计的强盛工具。数据库概念模型设计可以通过E-R图描述实际天下的概念模型。体系的E-R图显示了体系中实体之间的链接。而且Mysql数据库是自我掩护能力比力强的数据库,下图告急是对数据库实体的E-R图:
(1)课程上传信息管理E-R图,如图4-3所示:
https://i-blog.csdnimg.cn/direct/5531088b5ac34909a66c359a4843fa0d.png
 图4-3课程上传信息实体属性图
 (2) 课程信息管理E-R图如图4-4所示:

https://i-blog.csdnimg.cn/direct/a8f5faba3979493dba223cbc2e0d4f45.png
   图4-4课程信息管理实体图

这些功能可以充分满足安全在线学习平台的需求。此体系功能较为全面如下图体系功能结构如图4-5所示。
https://i-blog.csdnimg.cn/direct/551bcf1fc6cd42679c7402eb2c1dd9a8.png
                              图4-5体系功能结构图
4.3.2数据表

我们可以根据数据结构的详细分析要求,我们根据输入和输出数据量的要求进行分析,确定什么表表,结构之间的关系,我们可以验证,调整和完善,查询和浏览过程,可以实现数据库,以使用户对数据和功能有更多要求。
基于体系使用的数据库管理体系的特点,对数据库的概念模型进行了转换和构建。但是,这个体系只必要充分考虑安全在线学习平台的功能,而且组织比力清楚。
purchase_form表:

名称
范例
长度
不是null
主键
注释
purchase_form_id
int
11


购买表ID
course_number
varchar
64


课程编号
course_name
varchar
64


课程名
type
varchar
64


范例
price
varchar
64


售价
user
int
11


用户
number
varchar
64


数目
enclosure
varchar
255


附件
pay_state
varchar
16


支付状态
pay_type
varchar
16


支付范例
recommend
int
11


智能推荐
create_time
datetime
0


创建时间
update_time
timestamp
0


更新时间


ordinary_users表:
名称
范例
长度
不是null
主键
注释
ordinary_users_id
int
11


平凡用户ID
gender
varchar
64


性别
examine_state
varchar
16


考核状态
recommend
int
11


智能推荐
user_id
int
11


用户ID
create_time
datetime
0


创建时间
update_time
timestamp
0


更新时间

curriculum表:
名称
范例
长度
不是null
主键
注释
curriculum_id
int
11


课程ID
course_number
varchar
64


课程编号
type
varchar
64


范例
course_name
varchar
64


课程名
price
varchar
64


售价
number
int
11


数目
cover_picture
varchar
255


封面图
course_description
varchar
64


课程描述
hits
int
11


点击数
recommend
int
11


智能推荐
create_time
datetime
0


创建时间
update_time
timestamp
0


更新时间


course_classification表:
名称
范例
长度
不是null
主键
注释
course_classification_id
int
11


课程分类ID
type
varchar
64


范例
recommend
int
11


智能推荐
create_time
datetime
0


创建时间
update_time
timestamp
0


更新时间



slides表:
名称
范例
长度
不是null
主键
注释
slides_id
int
10


轮播图ID
title
varchar
64


标题
content
varchar
255


内容
url
varchar
255


链接
img
varchar
255


轮播图
hits
int
10


点击量
create_time
timestamp
0


创建时间
update_time
timestamp
0


更新时间




apply_for_courier表:
名称
范例
长度
不是null
主键
注释
apply_for_courier_id
int
11


申请快递员ID
full_name
varchar
64


姓名
contact_number
varchar
64


联系电话
current_address
varchar
64


现住地点
gender
varchar
64


性别
is_there_a_car
varchar
64


是否有车
driver_license
varchar
255


驾驶证
id
varchar
64


身份证
user
int
11


用户
remarks
varchar
64


备注
examine_state
varchar
16


考核状态
examine_reply
varchar
255


考核复兴
recommend
int
11


智能推荐
create_time
datetime
0


创建时间
update_time
timestamp
0


更新时间


comment表
名称
范例
长度
不是null
主键
注释
comment_id
int
11


评论ID
user_id
int
11


评论人ID
reply_to_id
int
11


复兴评论ID
content
longtext
0


内容
nickname
varchar
255


昵称
avatar
varchar
255


头像地点
create_time
timestamp
0


创建时间
update_time
timestamp
0


更新时间
source_table
varchar
255


来源表
source_field
varchar
255


来源字段
source_id
int
10


来源ID


    第五章  体系实现

5.1用户功能模块

安全在线学习平台登录界面,通过填写账号、密码、等信息进行登录,如图5-1所示。
https://i-blog.csdnimg.cn/direct/f04787898f594e97bd79200f373cd16a.png
图5-1登录界面图
登录关键代码如下。
/**
     * 登录
     * @param data
     * @param httpServletRequest
     * @return
     */
    @PostMapping("login")
    public Map<String, Object> login(@RequestBody Map<String, String> data, HttpServletRequest httpServletRequest) {
        log.info("[实行登录接口]");

        String username = data.get("username");
        String email = data.get("email");
        String phone = data.get("phone");
        String password = data.get("password");

        List resultList = null;
        Map<String, String> map = new HashMap<>();
        if(username != null && "".equals(username) == false){
            map.put("username", username);
            resultList = service.select(map, new HashMap<>()).getResultList();
        }
        else if(email != null && "".equals(email) == false){
            map.put("email", email);
            resultList = service.select(map, new HashMap<>()).getResultList();
        }
        else if(phone != null && "".equals(phone) == false){
            map.put("phone", phone);
            resultList = service.select(map, new HashMap<>()).getResultList();
        }else{
            return error(30000, "账号或密码不能为空");
        }
        if (resultList == null || password == null) {
            return error(30000, "账号或密码不能为空");
        }
        //判断是否有这个用户
        if (resultList.size()<=0){
            return error(30000,"用户不存在");
        }

        User byUsername = (User) resultList.get(0);


        Map<String, String> groupMap = new HashMap<>();
        groupMap.put("name",byUsername.getUserGroup());
        List groupList = userGroupService.select(groupMap, new HashMap<>()).getResultList();
        if (groupList.size()<1){
            return error(30000,"用户组不存在");
        }

        UserGroup userGroup = (UserGroup) groupList.get(0);

        //查询用户考核状态
        if (!StringUtils.isEmpty(userGroup.getSourceTable())){
            String sql = "select examine_state from "+ userGroup.getSourceTable() +" WHERE user_id = " + byUsername.getUserId();
            String res = String.valueOf(service.runCountSql(sql).getSingleResult());
            if (res==null){
                return error(30000,"用户不存在");
            }
            if (!res.equals("已通过")){
                return error(30000,"该用户考核未通过");
            }
        }

        //查询用户状态
        if (byUsername.getState()!=1){
            return error(30000,"用户非可用状态,不能登录");
        }

        String md5password = service.encryption(password);
        if (byUsername.getPassword().equals(md5password)) {
            // 存储Token到数据库
            AccessToken accessToken = new AccessToken();
            accessToken.setToken(UUID.randomUUID().toString().replaceAll("-", ""));
            accessToken.setUser_id(byUsername.getUserId());
            tokenService.save(accessToken);

            // 返回用户信息
            JSONObject user = JSONObject.parseObject(JSONObject.toJSONString(byUsername));
            user.put("token", accessToken.getToken());
            JSONObject ret = new JSONObject();
            ret.put("obj",user);
            return success(ret);
        } else {
            return error(30000, "账号或密码不正确");
        }
}

用户注册,通过填写账号、密码、昵称、手机、邮箱、身份等信息,输入完成后选择提交即可注册乐成,如图5-2所示。
https://i-blog.csdnimg.cn/direct/21de6fc1dc724cac9b7f55ef6ec32970.png
图5-2用户注册界面图
用户注册关键代码如下。
/**
     * 注册
     * @param user
     * @return
     */
    @PostMapping("register")
    public Map<String, Object> signUp(@RequestBody User user) {
        // 查询用户
        Map<String, String> query = new HashMap<>();
        query.put("username",user.getUsername());
        List list = service.select(query, new HashMap<>()).getResultList();
        if (list.size()>0){
            return error(30000, "用户已存在");
        }
        user.setUserId(null);
        user.setPassword(service.encryption(user.getPassword()));
        service.save(user);
        return success(1);
}

/**
     * 用户ID:用户获取其他与用户相干的数据
     */
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "user_id")
    private Integer userId;

    /**
     * 账户状态:(1可用|2异常|3已冻结|4已注销)
     */

    @Basic
    @Column(name = "state")
    private Integer state;

    /**
     * 所在用户组:决定用户身份和权限
     */

    @Basic
    @Column(name = "user_group")
    private String userGroup;

    /**
     * 上次登录时间:
     */

    @Basic
    @Column(name = "login_time")
    private Timestamp loginTime;

    /**
     * 手机号码:用户的手机号码,用于找回密码时或登录时
     */

    @Basic
    @Column(name = "phone")
    private String phone;

    /**
     * 手机认证:(0未认证|1考核中|2已认证)
     */

    @Basic
    @Column(name = "phone_state")
    private Integer phoneState;

    /**
     * 用户名:用户登录时所用的账户名称
     */

    @Basic
    @Column(name = "username")
    private String username;

    /**
     * 昵称:
     */

    @Basic
    @Column(name = "nickname")
    private String nickname;

    /**
     * 密码:用户登录所需的密码,由6-16位数字或英文组成
     */

    @Basic
    @Column(name = "password")
    private String password;

    /**
     * 邮箱:用户的邮箱,用于找回密码时或登录时
     */

    @Basic
    @Column(name = "email")
    private String email;

    /**
     * 邮箱认证:(0未认证|1考核中|2已认证)
     */

    @Basic
    @Column(name = "email_state")
    private Integer emailState;

    /**
     * 头像地点:
     */

    @Basic
    @Column(name = "avatar")
    private String avatar;

    /**
     * 创建时间:
     */

    @Basic
    @Column(name = "create_time")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Timestamp createTime;

    @Basic
    @Transient
    private String code;
}

如果课程的信息必要修改,管理员可以通过查询资讯的基本信息来查询资讯,查询课程是通过ajax技术来进行查询的,必要转达课程的标题、编号等参数然后在返回到该页面中,可以选中要修改或删除的那条信息,如果选中了超过一条数据,页面会挑一个窗口提示只能选择一条数,如果没有选中数据会挑一个窗口题型必须选择一条数据。当选择确认修改的时候,背景会根据传过来的id到数据库查询,并将效果返回到修改页面中,可以在修改页面中修改刚刚选中的信息当点击确认的时候from表单会将修改的数据提交到背景并保存到数据库中,就是说如果提交的数据数据库中存在就修改,否则就保存。
课程展示界面如下图所示。
https://i-blog.csdnimg.cn/direct/946e0536e18a4422977b5348903b0fd7.png
图5-3课程界面图
用户可以获取所有课程上传的列表并对其进行搜刮。包罗课程上传基本信息,如课程名、售价、附件、范例、课程描述、用户,有课程上传的描述以及展示图片等。
课程上传界面如下图所示。
https://i-blog.csdnimg.cn/direct/9e67bae621b24aa2ba6c9e8403e7076a.png
图5-4课程上传界面

用户在进我的收藏课查询个人资料、修改密码、收藏,有我的收藏的描述以及展示图片等。
我的收藏界面如下图所示。
https://i-blog.csdnimg.cn/direct/86ef4960d43f41259b3df96f2921e7b5.png
图5-5我的收藏界面
5.2 管理员功能模块的实现

管理员界面要只管简便大方,使用户能够方便找到必要的功能首页、站点管里(轮播图、公告栏)、用户管理(管理员)、内容管理(文章、文章范例)、更多管理(平凡用户、课程分类、课程、购买表、课程上传)、帖子分类、论坛帖子、资源中心,且要易于修改和维护,同时还要保证用户正当和体系安全。
首页界面如下图所示。
https://i-blog.csdnimg.cn/direct/d9f69881f4744a358301ece9013e2e52.png
图5-6管理员首页界面
用户管理关键代码如下所示。
@RequestMapping(value = {"/count_group", "/count"})
    public Map<String, Object> count(HttpServletRequest request) {
        Query count = service.count(service.readQuery(request), service.readConfig(request));
        return success(count.getResultList());
}
管理员对体系用户的管理,在yhzhgl.jsp实现管理员用户的管理,包罗录入、删除、修改,修改密码通过SESSION获取用户名,然后输入新密码,提交到mod.jsp中,使用sql命令更新密码。
用户管理界面如下图所示。
https://i-blog.csdnimg.cn/direct/3af905811f2047d78ebf53e4a8d6b6f3.png
图5-7用户管理管理界面
用户管理关键代码如下所示。
public String encryption(String plainText) {
        String re_md5 = new String();
        try {
            MessageDigest md = MessageDigest.getInstance("MD5");
            md.update(plainText.getBytes());
            byte b[] = md.digest();

            int i;

            StringBuffer buf = new StringBuffer("");
            for (int offset = 0; offset < b.length; offset++) {
                i = b;
                if (i < 0)
                    i += 256;
                if (i < 16)
                    buf.append("0");
                buf.append(Integer.toHexString(i));
            }

            re_md5 = buf.toString();

        } catch (Exception e) {
            e.printStackTrace();
        }
        return re_md5;
    }
该功能包罗对快递员进行添加、删除、修改,编辑。起首管理员进入背景主页,在左边菜单栏选择相应的功能操作。
起首管理员点击进入课程分类shangcheng_list.jsp,可以选择删除、或者修改,如果管理员点击删除,则将通过js提示管理员是否删除onClick="return confirm('真的要删除?')",如果删除后将请求sh.jsp进行数据库数据删除,如果管理员选择修改课程分类,将跳转至shangjia_updt2.jsp,然后管理员修改后,页面请求shangjia_updt2_list.jsp来操作数据库完成课程分类的修改。
课程分类管理界面如下图所示。
https://i-blog.csdnimg.cn/direct/78647f7032944769819aaaca1cb8a70e.png
图5-8课程分类管理界面图
该功能包罗对购买表进行添加、删除、修改,编辑。起首管理员进入背景主页,在左边菜单栏选择相应的功能操作。
起首管理员点击进入购买表shangcheng_list.jsp,可以选择删除、或者修改,如果管理员点击删除,则将通过js提示管理员是否删除onClick="return confirm('真的要删除?')",如果删除后将请求sh.jsp进行数据库数据删除,如果管理员选择修改购买表,将跳转至shangjia_updt2.jsp,然后管理员修改后,页面请求shangjia_updt2_list.jsp来操作数据库完成购买表的修改。
购买表界面如下图所示。
https://i-blog.csdnimg.cn/direct/c54df789692049e9af3e4d783f3d1a8f.png
图5-10购买表界面图
购买表关键代码如下所示。
@RequestMapping(value = "/del")
    @Transactional
    public Map<String, Object> del(HttpServletRequest request) {
        service.delete(service.readQuery(request), service.readConfig(request));
        return success(1);
}

    @Transactional
    public void delete(Map<String,String> query,Map<String,String> config){
        StringBuffer sql = new StringBuffer("DELETE FROM ").append("`").append(table).append("`").append(" ");
        sql.append(toWhereSql(query, "0".equals(config.get(FindConfig.GROUP_BY))));
        log.info("[{}] - 删除操作:{}",table,sql);
        Query query1 = runCountSql(sql.toString());
        query1.executeUpdate()

此页面的关键是编写课程信息,包罗课程编号,名称,详情等。单击提交按钮以完成信息的添加。如果未写入完备的课程信息,比方,如果未写入课程编号,体系将给出相应的错误提示,并且无法乐成输入。数据以概念的形式以onsubmit =“return checkForm()”的形式写入以进行查抄,checkForm()函数是一种用于写入数据的不同范例的校对方法,是不是为空也是经过form表单中的οnsubmit=”return checkForm()来查抄。
管理员点击左侧菜单“课程信息管理”,页面跳转到课程信息管理外观,调用背景课程查询所有课程信息。并将信息密封到数据聚集List,绑定到请求对象,然后页面跳转到相应的jsp,显示出课程信息,单击删除按钮完成课程信息的删除。
课程管理界面如下图所示。
https://i-blog.csdnimg.cn/direct/0bec5812ac1344c48dc80b500a9ae506.png
图5-11课程管理界面图
课程管理关键代码如下所示。
@PostMapping("/set")
@Transactional
    public Map<String, Object> set(HttpServletRequest request) throws IOException {
        service.update(service.readQuery(request), service.readConfig(request), service.readBody(request.getReader()));
        return success(1);
}

    public Map<String,String> readConfig(HttpServletRequest request){
        Map<String,String> map = new HashMap<>();
        map.put(FindConfig.PAGE,request.getParameter(FindConfig.PAGE));
        map.put(FindConfig.SIZE,request.getParameter(FindConfig.SIZE));
        map.put(FindConfig.LIKE,request.getParameter(FindConfig.LIKE));
        map.put(FindConfig.ORDER_BY,request.getParameter(FindConfig.ORDER_BY));
        map.put(FindConfig.FIELD,request.getParameter(FindConfig.FIELD));
        map.put(FindConfig.GROUP_BY,request.getParameter(FindConfig.GROUP_BY));
        map.put(FindConfig.MAX_,request.getParameter(FindConfig.MAX_));
        map.put(FindConfig.MIN_,request.getParameter(FindConfig.MIN_));
        return map;
}

    public Map<String,String> readQuery(HttpServletRequest request){
        String queryString = request.getQueryString();
        if (queryString != null && !"".equals(queryString)) {
            String[] querys = queryString.split("&");
            Map<String, String> map = new HashMap<>();
            for (String query : querys) {
                String[] q = query.split("=");
                map.put(q, q);
            }
            map.remove(FindConfig.PAGE);
            map.remove(FindConfig.SIZE);
            map.remove(FindConfig.LIKE);
            map.remove(FindConfig.ORDER_BY);
            map.remove(FindConfig.FIELD);
            map.remove(FindConfig.GROUP_BY);
            map.remove(FindConfig.MAX_);
            map.remove(FindConfig.MIN_);
            return map;
        }else {
            return new HashMap<>();
        }
}

    @Transactional
    public void update(Map<String,String> query,Map<String,String> config,Map<String,Object> body){
        StringBuffer sql = new StringBuffer("UPDATE ").append("`").append(table).append("`").append(" SET ");
        for (Map.Entry<String,Object> entry:body.entrySet()){
            Object value = entry.getValue();
            if (value instanceof String){
                sql.append("`"+humpToLine(entry.getKey())+"`").append("=").append("'").append(value).append("'").append(",");
            }else {
                sql.append("`"+humpToLine(entry.getKey())+"`").append("=").append(value).append(",");
            }

        }
        sql.deleteCharAt(sql.length()-1);
        sql.append(toWhereSql(query,"0".equals(config.get(FindConfig.LIKE))));
        log.info("[{}] - 更新操作:{}",table,sql);
        Query query1 = runCountSql(sql.toString());
        query1.executeUpdate();
}

    public String toWhereSql(Map<String,String> query, Boolean like) {
        if (query.size() > 0) {
            try {
                StringBuilder sql = new StringBuilder(" WHERE ");
                for (Map.Entry<String, String> entry : query.entrySet()) {
                    if (entry.getKey().contains(FindConfig.MIN_)) {
                        String min = humpToLine(entry.getKey()).replace("_min", "");
                        sql.append("`"+min+"`").append(" >= '").append(URLDecoder.decode(entry.getValue(), "UTF-8")).append("' and ");
                        continue;
                    }
                    if (entry.getKey().contains(FindConfig.MAX_)) {
                        String max = humpToLine(entry.getKey()).replace("_max", "");
                        sql.append("`"+max+"`").append(" <= '").append(URLDecoder.decode(entry.getValue(), "UTF-8")).append("' and ");
                        continue;
                    }
                    if (like == true) {
                        sql.append("`"+humpToLine(entry.getKey())+"`").append(" LIKE '%").append(URLDecoder.decode(entry.getValue(), "UTF-8")).append("%'").append(" and ");
                    } else {
                        sql.append("`"+humpToLine(entry.getKey())+"`").append(" = '").append(URLDecoder.decode(entry.getValue(), "UTF-8")).append("'").append(" and ");
                    }
                }
                sql.delete(sql.length() - 4, sql.length());
                sql.append(" ");
                return sql.toString();
            } catch (UnsupportedEncodingException e) {
                log.info("拼接sql 失败:{}", e.getMessage());
            }
        }
        return "";
    }




   第六章  测试

6.1测试目标

在对该体系进行完详细设计和编码之后,就要对安全在线学习平台步伐进行测试,检测步伐是否运行无误,反复进行测试和修改,使之最后成为完备的软件,满足用户的需求,实现预期的功能。
6.2测试过程

在软件的测试过程中,通常测试职员必要针对不同的功能模块设计多种测试用例。通过测试用例能够实时发现代码业务逻辑上是否与真实的业务逻辑相对应,实时发现代码上或逻辑上的缺陷,以此来来完善体系,提高软件产物的质量,使软件具有精良的用户体验。
注册测试用例表如下所示。
表6-1注册测试用例
测试性能
新用户注册
用例目标
测试体系新用户个人信息注册功能的功能和安全性
前提条件
进入注册页面填写个人信息
输入条件
预期输出
实际情况
各项基本信息输入不完备
不允许注册,无法点击注册按钮
一致
填写已存在的用户名
体系显示出提示信息,要求重新填写
一致
两次密码输入不一致
体系显示出提示信息,要求重新填写
一致
填写的各项信息没有符合提示的长度和字符要求
体系显示出提示信息,要求重新填写
一致
胡乱填写电话号码
收不到验证码
一致
填写验证码与收到的不一致
体系显示提示信息告知用户验证码错误,不予注册
一致
登录测试用例表如下所示。
表6-2登录测试用例
测试性能
用户或操作员登录体系
用例目标
测试用户或操作员登录体系时功能是否正常
前提条件
进入用户登录页面或操作员登录页面
输入条件
预期输出
实际情况
各项信息不予填写,直接点击登岸按钮
不允许登录,提示填写账号相干信息
一致
填写错误的登录名或密码后点击登录体系
提示用户名或密码错误,要求重新填写进行登录
一致
填写与验证码信息不一致的信息
体系显示出提示信息,表明验证码错误,要求重新填写
一致
课程管理测试用例表如下所示。
表6-3课程管理测试用例
测试性能
用户进行课程管理的操作
用例目标
测试用户进行课程管理操作时,该功能是否正常
前提条件
用户进入课程详情页,该课程能够被受理
输入条件
预期输出
实际情况
对着某课程点击“受理”按钮
界面跳转至受理界面
一致
在受理界面,输入必填项,点击“提交”按钮
提示“受理乐成”,并返回上一级界面
一致
在受理界面,填写受理表单的时候未输入完备,点击“提交”按钮
提示“受理失败”
一致
课程分类测试用例表如下所示。
表6-4快递分类测试用例
测试性能
发布技术相干信息管理功能
用例目标
测试体系操作者对课程分类相干信息进行管理的功能是否正常
前提条件
登录体系进入相干管理页面
输入条件
预期输出
实际情况
进入课程分类界面,点击“录入”按钮,填写所有必填项,点击提交
提示“录入乐成”,并返回查询界面
一致
进入课程分类界面,点击“录入”按钮,未填写一个或者多个必填项,点击提交
提示“录入失败”,请填写必填项
一致
进入课程分类界面,选择要修改的一条数据,点击该条数据后面的“修改”按钮 
节目跳转至修改界面
一致
在修改界面,修改可修改项后,点击“提交”按钮
提示“修改乐成”,并返回查询界面
一致
进入课程分类界面,点击某条数据后面的删除按钮
提示“是否要删除该数据”,如果用户点击“确定”按钮,则乐成删除该条数据,并提示“删除乐成”,之后返回查询界面
一致


6.3测试效果

经过对此体系的测试,得出该体系足以满足用户一样平常需求,在功能项目和操作等方面也能满足操作员对于其他用户的管理。但是,还有许多功能有待添加,这个体系仅能满足大部分的需求,还必要对此体系的功能更进一步的完善,如许使用起来才气更加的完善。

   第7章 总结与展望

通过安全在线学习平台的开发,本人巩固了之前学过的知识,现在将平时所学到的知识融合在设计中,在设计过程中,做了许多的预备,起首,在数据库体系的设计过程中,尤其是在数据库的工作原理、工作特点,对其深刻的讨论,与此同时,对于小型站点来说,最好服务器的选择,其次,利用所学的知识点分析所做的体系,并在此底子上设计。
现在本体系已经上线,正在试运行阶段,用户反馈精良,基本完成用户所需,试运行过程中没有出现阻断性问题,有一些不足和小问题也实时予以修正,体系上线后,为了保证数据的安全性,对体系进行了备份操作,体系备份是每两个月备份一次,数据库备份为每周备份一次,体系摆设在安全在线学习平台的云平台服务器中。
本次体系上线乐成后,得到了用户的高度认可,但是在功能上和性能上还需做进一步的研究处置惩罚,使其有更高的性能和更好的用户体验。
体系在以后的升级过程中,必要办理一系列用户所提出的问题,比方打印过程中如何避免浏览器的兼容性问题,大量用户访问时,如何保持较高的相应速度,在体系以后的升级过程中将着重办理这些安全性问题。
参考文献

刘春芳. 在线学习资源组织对大学生自主学习效果的影响研究山东财经大学,2021.
邹宇航. 基于机器学习的学习预警体系的设计与实现北京大学,2021.
高厦. 基于知识图谱的个性化学习平台的设计与实现.西北大学,2021.
孙金鑫. 面向学习效能提拔的智能在线学习平台设计与实现中国科学院大学(中国科学院沈阳计算技术研究所),2021.
王烁. 黑龙江省高校国际汉语在线讲授平台使用情况观察研究哈尔滨师范大学,2021.
杨超. 大学生在线学习投入度研究哈尔滨师范大学,2021.
张紫毓. 大学生在线学习力量表编制及应用研究辽宁师范大学,2021.
任星瑶. 大学生在线学习满足度影响因素研究云南师范大学,2021.
刘曼雯. 基于SNSs的在线个性化学习研究云南师范大学,2021.
王忠洋. 基于个性化推荐的高中物理在线学习平台的研究与设计云南师范大学,2021.
王涵. 学习者角度下大学生在线学习效能提拔计谋研究黑龙江大学,2021.
郭惜今. 在线学习环境中大学生学习自我效能感、学习顺应性与学习投入关系研究黑龙江大学,2021.
姜雪. 基于微信平台进行在线辅导的英语语法讲授设计研究上外洋国语大学,2021.
王言昆. 欠发达地区中学生在线学习存在的问题及改进对策研究陕西理工大学,2021.
Rafiqul Islam. A Study on Building the E-Learning Platform on the Satellite Internet for the Less Developed Countries华中师范大学,2020.
邹超群. 基于知识图谱的智慧学习平台的设计与实现西安理工大学,2020.
Xinzhou He,Shanshan Xu,Yujie Liu. Learning incentive ecosystem of online learning platform based on lifelong vocational skills training Institute of Management Science and Industrial Engineering.Proceedings of 2019 International Sports Science and Education Technology Conference(ISSETC 2019)Institute of Management Science and Industrial Engineering:计算机科学与电子技术国际学会(Computer Science and Electronic Technology International Society),2019:5




致谢

伴随着设计的完成,大学生存也随之即将结束。大学期间是我最爱惜的时光,大学时光中学会了许多,也成长了许多,这段时光中每一段回忆都刻在脑海中。感谢一起学习,一起成长同砚们,和成长过程悉心辅导的老师们,非常感激有你们的陪伴。
起首感谢我的引导老师,设计的完成离不开老师的一系列引导。在毕业设计的完成过程中,老师给出了许多中肯的建议,正是由于老师一丝不苟的工作态度,我的设计才气顺遂的完成。
最后,感谢在大学生存中每一位辅导我的老师,是你们教给了我丰富的知识,更教会了我遇到问题时,如何去应对并办理。谢谢你们的资助与支持。
点赞+收藏+关注  →私信领取本源代码、数据库


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: springboot安全在线学习平台---附源码131019