)
摘要随着信息技术的发展网络安全对于信息安全的发展有着非常重要的作用因此越来越多的计算机课程将Web安全课程作为重要的课程之一来教学。本课题通过Vue实现前后端分离的《Web安全》课程学习网站通过Spring Boot框架实现后端开发系统页面采用Element-Plus框架搭建通过Axios实现前后端数据交互。系统支持用户和管理员使用满足多种需求的在线课程学习。系统包含3种关于网络安全的学习途径分别是在线的网络安全课程学习、模拟性的攻防演练、关于网络安全的在线练习测试功能。通过管理员角色可将相关的网络安全课程资料发布包括文本资料、教学视频以及资料文件下载并可配置热门的网络攻防演练网站给用户使用。另外也提供了题目及试卷管理并可通过自动组卷减少试卷管理的负担。用户可在在线答题测试以后获取自己的试卷及错题信息方便回顾总结。除此以外系统还提供可视化数据统计方便管理员对系统有更直观的使用了解。通过智能化管理能够让学生有一个身临其境的真实完整的网络安全课程学习过程也有利于优化高校的专业设置更好地提升网络信息安全教育质量为社会培养更多优秀的网络信息安全人才。关键词在线答题SpringBootMySQLVue数据库表16张文末获取联系作者介绍专注计算机编程个人开发坚持原创非工作室源码全网唯一。✅技术主流SpringBoot Vue 前后端分离MySQL可本地运行✅配套资料源码 数据库 实验报告/论文 答辩 PPT部署演示远程部署问题解答技术范围SpringBoot、Vue、数据可视化、小程序、HLMT、Nodejs、uni-app、MySQL数据库、ElementUi等设计与开发。适用范围软件工程、软件技术、计算机科学与技术、大数据、云计算、JavaWeb开发、JavaEE、Java、Web应用开发、动态网页设计、小程序的毕设参考参考论文功能展示用户管理员数据库及架构部分核心代码设计package com.java.controller; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.io.FileUtil; import cn.hutool.core.lang.Dict; import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.StrUtil; import com.java.common.Constants; import com.java.common.Result; import com.java.entity.Account; import com.java.service.AdminService; import com.java.service.UserService; import com.java.utils.TokenUtils; import jakarta.annotation.Resource; import jakarta.servlet.ServletOutputStream; import jakarta.servlet.http.HttpServletResponse; import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import java.io.File; import java.io.IOException; import java.net.URLEncoder; import java.util.HashMap; import java.util.Map; RestController RequestMapping(/web) public class WebController { Resource private UserService userService; Resource private AdminService adminService; private static final String FILE_UPLOAD_PATH System.getProperty(user.dir) File.separator /files/; Value(${ip:localhost}) String ip; Value(${server.port}) String port; /** * 登录 */ PostMapping(/login) public Result login(RequestBody Account account){ if (StrUtil.isBlank(account.getUsername()) || StrUtil.isBlank(account.getPassword()) || StrUtil.isBlank(account.getRole())) { return Result.error(Constants.CODE_400,参数错误); } if(StrUtil.equals(account.getRole(),ROLE_USER)){ accountuserService.login(account); } if(StrUtil.equals(account.getRole(),ROLE_ADMIN)){ accountadminService.login(account); } return Result.success(account); } /** * 注册 */ PostMapping(/register) public Result register(RequestBody Account account) { if (StrUtil.isBlank(account.getUsername()) || StrUtil.isBlank(account.getPassword()) || StrUtil.isBlank(account.getRole())) { return Result.error(Constants.CODE_400, 参数错误); } if (StrUtil.equals(account.getRole(),ROLE_USER)) { userService.register(account); } if (StrUtil.equals(account.getRole(),ROLE_ADMIN)) { adminService.register(account); } return Result.success(); } /** * 修改密码 */ PostMapping(/password) public Result updatePassword(RequestBody Account account) { Account tokenaccount TokenUtils.getCurrentUser(); account.setUsername(tokenaccount.getUsername()); if (StrUtil.equals(tokenaccount.getRole(),ROLE_USER)) { userService.updatePassword(account); } if (StrUtil.equals(tokenaccount.getRole(),ROLE_ADMIN)) { adminService.updatePassword(account); } return Result.success(); } /** * 获取用户信息 */ GetMapping(/userInfo) public Result userInfo() { Account account TokenUtils.getCurrentUser(); if (StrUtil.equals(account.getRole(),ROLE_USER)) { return Result.success(userService.getById(account.getId())); } if (StrUtil.equals(account.getRole(),ROLE_ADMIN)) { return Result.success(adminService.getById(account.getId())); } return Result.error(Constants.CODE_605,获取用户信息失败); } /** * wang-editor编辑器文件上传接口 * * param file 前端传递过来的文件 */ PostMapping(/wangeditor_upload) public MapString, Object wangeditor_upload(RequestParam MultipartFile file) throws IOException { String originalFilename file.getOriginalFilename(); String type FileUtil.extName(originalFilename); // 定义一个文件唯一的标识码 String fileUUID IdUtil.fastSimpleUUID() StrUtil.DOT type; File uploadFile new File(FILE_UPLOAD_PATH fileUUID); // 判断配置的文件目录是否存在若不存在则创建一个新的文件目录 File parentFile uploadFile.getParentFile(); if (!parentFile.exists()) { parentFile.mkdirs(); } // 文件保存到磁盘 file.transferTo(uploadFile); // 拼接文件地址 String url http://ip:port/web/download/ fileUUID; MapString, Object resMap new HashMap(); // wangEditor上传图片成功后 需要返回的参数 resMap.put(errno, 0); resMap.put(data, CollUtil.newArrayList(Dict.create().set(url, url))); return resMap; } /** * 文件上传接口 * * param file 前端传递过来的文件 */ PostMapping(/upload) public String upload(RequestParam MultipartFile file) throws IOException { String originalFilename file.getOriginalFilename(); String type FileUtil.extName(originalFilename); // 定义一个文件唯一的标识码 String fileUUID IdUtil.fastSimpleUUID() StrUtil.DOT type; File uploadFile new File(FILE_UPLOAD_PATH fileUUID); // 判断配置的文件目录是否存在若不存在则创建一个新的文件目录 File parentFile uploadFile.getParentFile(); if (!parentFile.exists()) { parentFile.mkdirs(); } // 文件保存到磁盘 file.transferTo(uploadFile); // 拼接文件地址 String url http://ip:port/web/download/ fileUUID; // 返回文件地址 return url; } /** * 文件下载/预览接口 * 视频、图片、音频使用 inline 便于页面内播放/展示其他文件仍按附件下载 */ GetMapping(/download/{fileUUID}) public void download(PathVariable String fileUUID, HttpServletResponse response) throws IOException { File uploadFile new File(FILE_UPLOAD_PATH fileUUID); if (!uploadFile.exists()) { response.setStatus(HttpServletResponse.SC_NOT_FOUND); return; } String ext FileUtil.extName(fileUUID).toLowerCase(); String contentType resolveContentType(ext); boolean inline isInlineMedia(ext); ServletOutputStream os response.getOutputStream(); String disposition inline ? inline : attachment; response.setHeader(Content-Disposition, disposition ;filename URLEncoder.encode(fileUUID, UTF-8)); response.setContentType(contentType); try { os.write(FileUtil.readBytes(uploadFile)); } catch (Exception e) { System.err.println(文件下载失败文件不存在); } os.flush(); os.close(); } private boolean isInlineMedia(String ext) { return CollUtil.newArrayList( mp4, webm, ogg, mov, avi, m4v, jpg, jpeg, png, gif, webp, bmp, svg, mp3, wav, aac ).contains(ext); } private String resolveContentType(String ext) { return switch (ext) { case mp4, m4v - video/mp4; case webm - video/webm; case ogg - video/ogg; case mov - video/quicktime; case avi - video/x-msvideo; case jpg, jpeg - image/jpeg; case png - image/png; case gif - image/gif; case webp - image/webp; case bmp - image/bmp; case svg - image/svgxml; case mp3 - audio/mpeg; case wav - audio/wav; case aac - audio/aac; case pdf - application/pdf; default - application/octet-stream; }; } }获取联系擅长功能设计、开题报告、任务书、中期检查PPT、系统功能实现、代码编写、论文编写和辅导、论文降重、长期答辩答疑辅导、腾讯会议一对一专业讲解辅导答辩、模拟答辩演练、和理解代码逻辑思路等。项目功能完整可在本地运行并可远程调试确保运行顺利获取联系方式毕业设计获取https://blog.csdn.net/qq_59059632/article/details/163759879?spm1011.2415.3001.5331