exam_online_hongfurui

Introduction: 在线考试系统,java,vue,springboot,springcloud
More: Author   ReportBugs   
Tags:

项目 Githubhttps://github.com/hongfurui2014/exam_online_hongfurui

考试前台http://exam.itdupan.com/

后台管理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.comhttp://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 记录的日志还是比较粗粒度,以后有时间再考虑优化了
  • 分布式事务问题
Apps
About Me
GitHub: Trinea
Facebook: Dev Tools