HBU-paperOline

项目介绍

HBU-paperOline 项目是基于SpringBoot2的一整套后端管理平台,提供整套公共微服务服务模块:集中权限管理(单点登录)、内容管理、人事办公。旨在通过实战分享个人经验简洁高效,减少过渡封装,展现技术本质,以技术服务于业务。

演示项目 前后端Java SpringBoot + Thymeleaf 和 数据库Mysql8.0 已部署于 腾讯云服务器

演示地址 http://mmx.hanxu51.cn:8083 已下架


  • 测试 教师端账号 teacher 密码 teacher
  • 测试 学生端账号 student 密码 student

代码 仓库https://gitee.com/hanxu051/hbu-paper-oline

【密码学课程设计】HBU-paperOline 2020-06-06_云计算

项目模块

1. 项目功能

用户管理系统功能(UPMS)


  • 系统登录:系统用户登录,账号为admin/admin/admin123
  • 用户管理:新建用户,修改用户,删除用户,查询用户
  • 机构管理:新建机构,修改机构,删除机构,查询机构
  • 角色管理:新建角色,修改角色,删除角色,查询角色
  • 资源管理:新建资源,修改资源,删除资源,查询资源

论文管理系统功能(CMS)

论文管理中台

【密码学课程设计】HBU-paperOline 2020-06-06_数据库_02

个人论文管理

【密码学课程设计】HBU-paperOline 2020-06-06_apache_03

技术说明

0.安全验证

1. 用户密码加盐存储

注册时 为每个用户生成一个盐 讲密码和盐一起存储到数据库

String salt = RandomStringUtils.randomAlphanumeric(30);
upmsUser.setSalt(salt);
String password = upmsUser.getPassword() + salt;
upmsUser.setPassword(MD5Utils.encrypt(upmsUser.getUsername(), password));

登录时 将 密码+用户密码的盐 进行加密 判断和 数据库里的 密码是否一致

//密码加盐
password += user.getSalt();
//验证用户信息
password = MD5Utils.encrypt(username, password);
UsernamePasswordToken token = new UsernamePasswordToken(username, password);
Subject subject = SecurityUtils.getSubject();
try {
subject.login(token);

数据库设计结构

【密码学课程设计】HBU-paperOline 2020-06-06_云计算_04

2. 用户文件AES加密上传

采用 AES进行加密打包

// 加密文件
try {
String ZipName = NewfileName.substring(0, NewfileName.lastIndexOf('.')) + "new";
FileUtil.zipFilesAndEncrypt(Path, NewfileName, ZipName, key);
} catch (Exception e) {
e.printStackTrace();
}

ipParameters parameters = new ZipParameters();
parameters.setCompressionMethod(Zip4jConstants.COMP_DEFLATE);
parameters.setCompressionLevel(Zip4jConstants.DEFLATE_LEVEL_NORMAL);
if(!StringUtils.isEmpty(password)){
parameters.setEncryptFiles(true);
parameters.setEncryptionMethod(Zip4jConstants.ENC_METHOD_AES);
parameters.setAesKeyStrength(Zip4jConstants.AES_STRENGTH_256);
parameters.setPassword(password);
}
ArrayList<File> filesToAdd = new ArrayList<File>();

【密码学课程设计】HBU-paperOline 2020-06-06_apache_05

3. 文件下载密码验证

文件下载时 会从数据库进行密码匹配 密码错误无法下载 论文文件

【密码学课程设计】HBU-paperOline 2020-06-06_腾讯云_06

文件下载 支持 安全的 加密压缩包传输 和 普通的源文件 传输两种格式

【密码学课程设计】HBU-paperOline 2020-06-06_apache_07

【密码学课程设计】HBU-paperOline 2020-06-06_apache_08

由于使用 aes 加密打成了压缩包 查看压缩文件时需要输入 设置的密码

【密码学课程设计】HBU-paperOline 2020-06-06_数据库_09

4. 文件一致性验证MD5特征码

文件上传成功之后 会利用 文件的字节码数据 生成一个 MD5 码特征值

我们可以 选择 本地下载的文件 验证 特征值是否一致

【密码学课程设计】HBU-paperOline 2020-06-06_数据库_10

选择 刚刚下载好的文件 进行 源文件验证

【密码学课程设计】HBU-paperOline 2020-06-06_数据库_11

我们发现 MD5码 是相同的 说明 文件是同一个文件 传输过程中 未发生篡改

【密码学课程设计】HBU-paperOline 2020-06-06_云计算_12

【密码学课程设计】HBU-paperOline 2020-06-06_云计算_13

文件验证 也可以通过 压缩包进行 文件验证

【密码学课程设计】HBU-paperOline 2020-06-06_apache_14

密码错误 或 文件不一致 会弹出相应提示

【密码学课程设计】HBU-paperOline 2020-06-06_腾讯云_15

当压缩文件 和 文件密码 正确时 会弹出相应提示

我们会看到 本地 MD5 和云端 加密 MD5 值一致

【密码学课程设计】HBU-paperOline 2020-06-06_git_16

【密码学课程设计】HBU-paperOline 2020-06-06_apache_17

【bug】论文 表单提交后 文件验证 显示密码错误

前后台 数据交互存在 错误

后台判断逻辑需要从新 梳理

非 严重漏洞 修复排期预计在 七月学校课程结束后进行完善

(此功能经过测试 在 提交表单之后 进行压缩文件验证 会出现错误 源文件验证 功能正常 后续 我再进行修复)【密码学课程设计】HBU-paperOline 2020-06-06_云计算_18

5. 用户权限限制

项目设置了 普通学生 和 老师管理员 两种基本角色

【密码学课程设计】HBU-paperOline 2020-06-06_云计算_19

学生拥有 个人论文 上传管理权限

【密码学课程设计】HBU-paperOline 2020-06-06_云计算_20

教师拥有 角色 权限管理 用户管理 和 论文后台管理 相关权限

【密码学课程设计】HBU-paperOline 2020-06-06_git_21

登录 学生角色账户 20181101051\student

可以进入 个人论文管理 界面进行 个人论文的 添加 删除 和修改

【密码学课程设计】HBU-paperOline 2020-06-06_数据库_22

学生可以看到 教师对论文的批改状态 并且 论文密码 不在前端页面做展示 做了密码保护

防止因 学生账号密码丢失造成的 论文信息泄露

【密码学课程设计】HBU-paperOline 2020-06-06_腾讯云_23

教师用户 可以查看到 论文的 文件密码 并且可以 修改 论文状态

【密码学课程设计】HBU-paperOline 2020-06-06_apache_24

管理员 可以看到 论文所有者相关的 基础信息

【密码学课程设计】HBU-paperOline 2020-06-06_git_25

学生 在个人论文 管理界面 只涉及自身 文件 不展示相关 信息

【密码学课程设计】HBU-paperOline 2020-06-06_git_26

6. 教师创建学生

第一步、创建普通用户

在用户管理界面 进行学生的添加

【密码学课程设计】HBU-paperOline 2020-06-06_git_27

填写学生 相关信息 并选择 所属机构

【密码学课程设计】HBU-paperOline 2020-06-06_云计算_28

第二步、加入学生角色

角色 管理界面 选择 蓝色logo 的角色管理

【密码学课程设计】HBU-paperOline 2020-06-06_git_29

进入学生 权限配置 页面

【密码学课程设计】HBU-paperOline 2020-06-06_git_30

勾选需要 加入学生 角色的用户 选择提交

【密码学课程设计】HBU-paperOline 2020-06-06_数据库_31

后端技术

2.前端技术


  • JS框架:jQuery、BootStrap
  • 弹出层:layer
  • 树结构控件:zTree
  • 数据表格:bootstrap-table

3.开发工具


  • MySql: 数据库
  • Tomcat: 应用服务器
  • Git: 版本管理
  • IntelliJ IDEA: 开发IDE
  • MySQLWorkbench: 数据库客户端

4.规范约束

  • 参考[阿里巴巴Java开发手册]

部署说明

1.运行环境


  • Jdk8+
  • Mysql5.5+

2.部署说明

运行前准备工作