exam_online_hongfurui
Introduction: 在线考试系统,java,vue,springboot,springcloud
Tags:
Off-项目 Github:https://github.com/hongfurui2014/exam_online_hongfurui
后台管理:http://hongfurui.itdupan.com/
在线考试系统,大四毕设,采用 vue 与 springcloud 微服务架构开发,前后端完全分离,json 格式数据交互,全部由本人独立开发完成。目前项目已部署在本人的学生版阿里云 centos7 服务器上。
主要功能有:对班级和科目的管理;对试题和试卷的管理(包含 excel 文件模板大批量一次性上传试题到题库,自动从题库中抽题出试卷);用户、角色、权限三级设计实现方法级别的细粒度权限控制;aop 后置通知实现整个系统重要操作日志的记录。
项目技术栈
前端
- 前端后台管理系统由 vue 与 elementUI 搭建,路由使用 vue-router,前端在线考试系统由 nuxt 搭建,ajax 请求均使用 axios。
- vsCode 工具开发
后台
mysql 数据库,mybatis(通用 Mapper、PageHelper 分页助手)
springBoot(spring、springMVC)
springCloud(eureka、zuul、feign)搭建微服务工程
nginx 反向代理域名
采用 jwt+rsa 加密生成 token,写入 cookie 的方式做无状态登录
maven、idea、postman 工具开发
说明
目录说明
exam_online_hfr_admin
为前端后台管理项目,npm install
安装依赖后npm run dev
可运行exam_online_hfr_portal
为前端在线开心系统项目,npm install
安装依赖后npm run dev
可运行exam_online_hfr_api
为后端微服务项目,maven 下载完依赖,修改 application.yml 配置文件中的数据库密码和 jwt 配置后即可运行
后台 api 接口说明
- 接口基准地址:
http://zuul.itdupan.com/api/
- 示例:
http://zuul.itdupan.com/api/school/grade/findGrades
,其中 api 为 zuul 网关前缀,school 为 zuul 转发到的微服务名称路径,/grade/findGrades 为 controller 为 controller 请求访问路径。所有请求都经过 zuul 网关,已在网关 zuulFilter 中做鉴权。
- 示例:
服务端已开启 cors 跨域支持
- 只允许
http://hongfurui.itdupan.com
和http://exam.itdupan.com
两个域名对http://zuul.itdupan.com
进行跨域访问
- 只允许
请求方式
GET 查询
POST 新增
PUT 更新
DELETE 删除
- 使用 HttpStatus Code 做标识状态
200 OK 响应成功
201 CREATED 新增或更新成功
204 DELETED 删除成功
400 BAD_REQUEST 请求參數不合法
401 UNAUTHORIZED 身份不合法
403 FORBIDDEN 权限不足
404 NOT_FOUND 資源服務器未找到
500 INTERNAL_SERVER_ERROR 服務器內部錯誤
添加 删除 修改失败将返回状态码自定义状态码:600
- 后台返回格式统一使用 json 格式,返回样式如下:
{
"httpCode": 200,
"message": "查询所有班级成功!",
"data": [
{
"gradeId": 20,
"gradeName": "16 级软件工程 2 班"
},
{
"gradeId": 21,
"gradeName": "16 级软件工程 1 班"
}
]
}
- 捕获全局 500 RuntimeException,返回样式如下:
{
"httpCode": 500,
"message": "操作失败,系统未知异常,请尽快反馈给系统管理员!",
"exceptionTime": "2020-03-12 17:32:55"
}
其它说明
资料
中的 sql 文件为最干净的数据库,后台登录账号和密码均为demo_user
,导入试题模板.xlsx
按照格式即可导入试题- 本机 SwitchHosts 配置
# 在线考试系统 java 后台网关
127.0.0.1 zuul.itdupan.com
# 在线考试系统前端
127.0.0.1 exam.itdupan.com
# 在线考试系统后台管理
127.0.0.1 hongfurui.itdupan.com
- nginx 代理配置如下
server {
listen 80;
server_name zuul.itdupan.com; # 网关
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
location / {
proxy_pass http://127.0.0.1:10011;
proxy_connect_timeout 600;
proxy_read_timeout 600;
}
}
server {
listen 80;
server_name hongfurui.itdupan.com; # 后台管理
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_connect_timeout 600;
proxy_read_timeout 600;
}
}
server {
listen 80;
server_name exam.itdupan.com; # 前台
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
location / {
proxy_pass http://127.0.0.1:9999;
proxy_connect_timeout 600;
proxy_read_timeout 600;
}
}
项目待改进优化的一些问题
- axios 下载的文件打开出错
- 自动抽题组卷算法待优化
- nuxt 的路由导航守卫问题
- mouted()钩子函数未能有效获取 vuex 中的数据,时机问题
- 正在答题时若刷新则已做试题的状态重置,等以后有时间考虑对答题情况进行 watch 深度监控,写入 redis 读取应该就能解决
- 答题时时间倒计时以及计时结束自动提交试卷功能,下一步考虑使用 quartz 框架解决
- aop 记录的日志还是比较粗粒度,以后有时间再考虑优化了
- 分布式事务问题