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

2023-05-16

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

image-20210606174152099

项目模块

1. 项目功能

用户管理系统功能(UPMS)

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

论文管理系统功能(CMS)

论文管理中台

image-20210606173344510

个人论文管理

image-20210606173357544

技术说明

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);

登录相关代码链接

数据库设计结构

密码加盐存储

2. 用户文件AES加密上传

采用 AES进行加密打包

文件上传业务逻辑相关代码链接

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

文件AES加密压缩相关代码链接

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>();

image-20210606164828390

3. 文件下载密码验证

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

image-20210606165443457

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

image-20210606165557990

image-20210606165941182

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

image-20210606170057204

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

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

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

image-20210606170324081

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

image-20210606170450957

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

image-20210606170601656

image-20210606170651739

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

image-20210606170741223

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

image-20210606170838357

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

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

image-20210606170953557

2021年6月6日17:20:55 测试漏洞 bug登记:I3UIMK 链接

【bug】论文 表单提交后 文件验证 显示密码错误
前后台 数据交互存在 错误
后台判断逻辑需要从新 梳理
非 严重漏洞 修复排期预计在 七月学校课程结束后进行完善
(此功能经过测试 在 提交表单之后 进行压缩文件验证 会出现错误 源文件验证 功能正常 后续 我再进行修复)image-20210606171545492

5. 用户权限限制

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

image-20210606172356338

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

image-20210606172430110

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

image-20210606172455898

登录 学生角色账户 20181101051\student

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

image-20210606172612992

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

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

image-20210606172746241

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

image-20210606172951274

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

image-20210606173044091

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

image-20210606173125772

6. 教师创建学生

第一步、创建普通用户

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

image-20210606173518601

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

image-20210606173559128

第二步、加入学生角色

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

image-20210606173751957

进入学生 权限配置 页面

image-20210606173837222

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

image-20210606173915556

后端技术

技术版本说明官网
spring-boot2.3.4核心框架https://start.spring.io/
Apache Shiro1.4.2安全框架http://shiro.apache.org/
MyBatis1.3.2持久层框架http://mybatis.org/
PageHelper1.2.5MyBatis物理分页插件http://git.oschina.net/free/Mybatis_PageHelper
Alibaba Druid1.1.14数据库连接池https://druid.apache.org/
Thymeleaf2.0.0模板引擎https://www.thymeleaf.org/
Logback1.2.3日志管理http://logback.qos.ch
Swagger2.9.2API接口文档页面https://swagger.io/
Velocity1.7模板引擎http://velocity.apache.org/

2.前端技术

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

3.开发工具

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

4.规范约束

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

部署说明

1.运行环境

  • Jdk8+
  • Mysql5.5+

2.部署说明

运行前准备工作

1. 新建ming数据库,导入database文件夹下的 `upms_upload.sql`。[在线文件链接](https://gitee.com/hanxu051/hbu-paper-oline/blob/master/database/HBUPaperOnlie.sql)
2. 修改 `application.yml` 文件中的mysql数据库的用户名和密码。[在线文件链接](https://gitee.com/hanxu051/hbu-paper-oline/blob/master/ming-admin/src/main/resources/application-test.yml)

启动

  • 打开ming-admin模块下的 com.ming.MingAdminApplication 类的 main() 方法进行启动。
  • 代码跳转https://gitee.com/hanxu051/hbu-paper-oline/blob/master/ming-admin/src/main/java/com/ming/MingAdminApplication.java#L20

登录

账户/密码
测试账号:admin/admin123
教师账户:teacher/teacher
学生账户:20181101051/student

系统演示截图

参与开发

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【密码学课程设计】HBU-paperOline 2020-06-06 的相关文章

  • make -C M选项

    modules MAKE C KERNELDIR M 61 PWD modules 这句是Makefile的规则 xff1a 这里的 MAKE 就相当于make xff0c C 选项的作用是指将当前工作目录转移到你所指定的位置 M 61 选
  • 什么是耦合、解耦

    一 耦合 1 耦合是指两个或两个以上的体系或两种运动形式间通过相互作用而彼此影响以至联合起来的现象 2 在软件工程中 xff0c 对象之间的耦合度就是对象之间的依赖性 对象之间的耦合越高 xff0c 维护成本越高 xff0c 因此对象的设计
  • ERROR! Session/line number was not unique in database. History logging moved to new session 178

    原来的代码 xff1a MODEL NAME 61 39 ssd mobilenet v1 coco 2017 11 17 39 载入训练好的pb模型 detection graph 61 tf Graph with detection g
  • 基于px4的hc-sr04-pwm超声波模块的驱动开发

    一直想实现无人的避障功能 xff0c 但是px4源生代码又不支持避障 xff0c 所以只能自己动手写 避障的基础条件还是获取距离数据 xff0c 超声波模块就是最熟悉也是最简单的模块了 px4源生代码也支持了几种超声波模块 xff0c 但是
  • px4最新版commander代码分析

    commander位于Firmware src modules commander文件夹中 该部分主要负责对地面站 遥控器以及其它部分发布的cmd命令 xff0c 包括vehicle command VEHICLE CMD DO SET M
  • SMPL模型进阶

    SMPL模型是一种参数化人体模型 xff0c 是马普所提出的一种人体建模方法 xff0c 该方法可以进行任意的人体建模和动画驱动 这种方法与传统的LBS的最大的不同在于其提出的人体姿态影像体表形貌的方法 xff0c 这种方法可以模拟人的肌肉
  • px4最新版navigation代码分析

    navigation部分位于代码Firmware navigator文件夹中 其中不仅仅包含navigator的代码 xff0c 最主要的9种不同的飞行模式的代码 xff0c 它们针对不同的飞行模式计算出不同的期望的位置 xff0c 即po
  • 基于最新版本px4的takeoff代码分析

    takeoff是px4的一种飞行模式 xff0c 跟之前分析的lotier部分是一种类型 takeoff模式也是由navigator部分进行调用的 xff0c 所以也就印证了上一篇说navigator相当于一个分发器的说法 各种飞行模式实际
  • Nuttx移植到S5PV210

    最近没有分析飞控的代码 xff0c 转而研究Nuttx实时操作系统的移植 入门一个操作的移植还是挺有难度的 xff0c 首先代码的框架能理清楚就很不容易了 xff0c 尤其是Nuttx这种相对小众的操作系统 xff0c 参考资料比较少 xf
  • 基于最新版PX4-Autopilot的follow_target代码分析

    快有半年没更博客了 最近加班比较多 xff0c 而且一直想研究研究ROS那块 xff0c 但是学到的又不足以写出博客 xff0c 也就一直没更新 最近接了一个目标跟踪的二次开发的活 xff0c 需求就是根据挂载摄像头传回来的与识别的目标的角
  • PX4-Autopilot的串口读写驱动程序开发

    最近突然感觉 xff0c 能把开发程序的流程写清楚比开发程序本身还困难 xff0c 所以之前写的文章都是毫无章法 xff0c 想到哪写到哪 xff0c 努力改变中 之前开发了超声波测量距离的驱动 xff0c 实质是px4的IO口操作 本次的
  • px4的IO固件升级代码分析

    很多时候都在看fmu的代码 xff0c 很少看io的代码 一个原因是io的功能简单 xff0c 代码少 xff0c 然后是io的功能一般都是通过fmu实现的 出于好奇 xff0c 最近分析了下io的固件升级的过程 首先 xff0c io和f
  • 你对自己做的项目感兴趣吗

    一家公司 主要是开发OA的 xff0c 大家知道OA的简单含义是办公自动化系统 用途是利用信息化系统帮助企业或者政府单位办公协作 xff0c 目的是为了提高办公效率 xff0c 减少过去由于手工操作带来的 麻烦 xff0c 和提高工作的准确
  • Nginx反向代理解决跨域问题(个人学习总结)

    一 理解Nginx Nginx是一款轻量级的Web服务器 反向代理服务器及电子邮件 xff08 IMAP POP3 xff09 代理服务器 xff0c 在BSD like 协议下发行 其特点是占有内存少 xff0c 并发能力强 xff0c
  • C语言:文本加密

    文本加密 输入一个英文句子 xff0c 以 结束 将其中所有的大写英文字母 43 3 xff0c 小写英文字母 3 xff0c 非英文字母不变 xff0c 输出加密后的句子 提示 xff1a xff08 1 xff09 当读入的字符为 时
  • (三)决策树

    0 基本流程 每个结点对应一个属性测试 xff0c 结点包含的样本集合根据结果分到不同的子结点决策树算法流程 xff1a 总结 xff1a 每次选择其中一个特征对样本集进行分类 xff0c 对分类后的子集重复前步骤根据8中的划分方法 xff
  • Nuttx 字符设备驱动

    字符设备是非常普遍的一种设备 xff0c 这种设备在I O传输过程中只能以字符为单位进行传输 xff0c 如键盘 鼠标 以及一些传感器设备都是字符设备 Nuttx采用VFS xff0c 和linux一样的设计思路 xff0c 即 一切设备皆
  • 阿木实验室 ubuntu 20.04 Prometheus 系统 编译问题

    1 compile detection sh error make 2 CMakeFiles darknet ros lib dir build make 2017 xff1a CMakeFiles darknet ros lib dir
  • prometheus 无人机平台 gazeboORBSLAM3调试实现rgbd模式

    提示 xff1a 文章写完后 xff0c 目录可以自动生成 xff0c 如何生成可参考右边的帮助文档 目录 前言 一 镜像系统安装 二 prometheus镜像快速使用 1 prometheus px4 xff0c Prometheus编译
  • TX2上用D435i跑Vins-RGBD+Octomap生成八叉树地图

    1 realsense的SDK 和普通电脑不同 xff0c TX2是ARM xff0c 不能直接从官网下载编译 教程 xff1a https blog csdn net rosfreshman article details 1164040

随机推荐

  • PX4和Airsim通信操作流程

    坑真几把多 先在Windows上安装UE4和Airsim不再赘述 xff0c 官网都有 虚拟机或其他计算机安装好ubuntu并安装PX4 1 安装PX4的ROS相关包 xff08 mavros xff09 1 第一种 xff1a 进入官网安
  • mavros安装流程(超简单)

    只适用于Ubuntu18 04 在Ubuntu中新建一个空白文本 xff0c 命名为123 sh bin bash Bash script for setting up ROS Melodic with Gazebo 9 developme
  • mavros与PX4建立连接(仿真)

    安装好 mavros 之后 xff0c 进入 home melodic catkin ws src mavros mavros launch 将 px4 launch 文件中 34 fcu url 34 修改成如下 xff1a lt arg
  • Airsim和ROS直连(自带飞控)

    安装Airsim git clone https github com Microsoft AirSim git cd AirSim setup sh build sh 安装好了之后编译ROS包 cd AirSim ros catkin b
  • SD卡Ubuntu制作镜像

    查看挂载盘 xff1a df h 备份命令 xff1a sudo dd if 61 dev sdc gzip gt home shi raspberry gz 查看备份进度 xff08 5s xff09 xff1a sudo watch n
  • 无需命令行,用 VSCode 轻松提交 Git 代码

    前言 Git 作为版本控制工具 xff0c 通过在开发过程中记录代码的变化 xff0c 简化了开发者之间的代码协作 而对于许多开发者而言 xff0c 命令行提交 Git 代码却是一项让人感到困难的任务 然而 xff0c 现在你可以轻松地通过
  • 开挂的人生背后  不仅仅是热爱

    在大城市飘来飘去 xff0c 看似潇洒 xff0c 其实内心还是会感到彷徨不安 身边的同事 xff0c 朋友不是努力的考取各种证书就是在人群中游刃有余 对于从小就酷爱甜食的 80 后女生 Zoe 来说 xff0c 今年 5 月份的一个决定
  • 轻松掌握 CSS,实现 loading 加载中的多种形式

    前言 现如今网页越来越趋近于动画 xff0c 相信大家平时浏览网页或多或少都能看到一些动画效果 xff0c 今天我们来做一个有意思的动画效果 xff0c 纯 css 实现 loading 加载中 xff08 多种展现形式 xff09 xff
  • Ubuntu16.04在线安装RealSense SDK与使用

    Ubuntu16 04在线安装RealSense SDK与使用 2019年5月左右 xff0c 拿到了两个Intel RealSense设备 D425和D435i xff0c 感觉不错就拿过来研究研究 xff0c 刚开始真是一窍不通 xff
  • linux中用gcc编译源代码的四个步骤(转载)

    在Linux下进行C语言编程 xff0c 必然要采用GNU GCC来编译C源代码生成可执行程序 一 GCC快速入门 Gcc指令的一般格式为 xff1a Gcc 选项 要编译的文件 选项 目标文件 其中 xff0c 目标文件可缺省 xff0c
  • 随笔之ros多线程

    nt main int argc char argv ros init argc argv 34 convert to mono 34 ros NodeHandle nh ros Publisher image pub 61 nh adve
  • 【FreeRTOS 消息队列】消息队列传递变量

    消息队列创建及运行 xff0c 参阅安富莱电子demo span class token keyword static span QueueHandle t xQueue1 span class token operator 61 span
  • 在校大学生如何规划自己的程序员之路

    近况 九月份 有很多 不甘和后悔 也有 很多的收获 会 不甘 没能拿到网易转正的意向书 会 后悔 腾讯的项目没能顺利的结项 不过 好在 自己都没有全权押宝 抓着秋招的尾巴 投了能投的公司 即使 七八月份 六十多天没有任何收获 也还是 坚持下
  • 不要停下来更新

    1 又换平台了 知识库切换到了 yuque 有诸多几点原因 之前的平台太过于垂直 圈子太小众做好了其实也不会怎么样 需要一个笔记平台可以记录自己的学习点滴需要一个文档系统 形成自己的弹药库可以进行分享和私密记录 1 1长期主义 主要的原因还
  • 我的创作流

    2021年09月19日21 37 07 创作流 虽然我创作的 肯定不咋地 但是 还是 想写一下自己的创作流规划 对 xff0c 这仅仅是个 规划而已 正确 吸引人的 创作应该 是 总分总的 更吸引读者 但是 我自己写的东西 主要还是用来 复
  • 我,22届双非本科,150+场面试 拿到了20+offer

    文章目录 秋招的喜怒哀乐和酸甜苦辣万千应届生中的普通背景实习拿到的offer秋招目前收到的 意向 分享我自己个人的复习准备艰难求职路基础不牢地动山摇简历挂是常态面试不要慌 xff0c 稳住就能赢 秋招备战计划第一弹 今天就开始备战秋招思维导
  • 【业界冥灯】今年校招太难了我面试过的大厂都逃不过被制裁的命运

    今年应届生的校招 真是太难了 卷死我了 家人们 大家可能不清楚 我这几个月 究竟 经历了啥 尝试录制了一个视频版 到B站 发现自己 好紧张 话都说不清楚 还是要努力 练习 进步啊 视频版 指路 第一次 被熟人 认出来 是在 滴滴 橙心优选
  • Docker镜像仓库

    一 搭建私有镜像仓库 常见镜像仓库服务 镜像仓库 xff08 Docker Registry xff09 有公共的和私有的两种形式 公共仓库 例如Docker官方的Docker Hub xff0c 国内也有一些云服务商提供类似于Docker
  • 35岁被大厂踢出豪门,褪去这层皮你还剩什么

    很多人 他们在大厂里边混得很好 他们大厂里边这个位置很高 但是突然有一天 晋升不上去了 领导空降了 项目解散了 某一个东西调岗了 给他打击很大准备跳槽 别到那一天 xff0c 这是一个常态 这个忽然有一天 xff0c 这件事情是你在大厂里边
  • 【密码学课程设计】HBU-paperOline 2020-06-06

    HBU paperOline 项目介绍 HBU paperOline 项目是基于SpringBoot2的一整套后端管理平台 xff0c 提供整套公共微服务服务模块 xff1a 集中权限管理 xff08 单点登录 xff09 内容管理 人事办