SpringBoot+Vue 高校宿舍管理期末课程项目|JWT 认证 + 入住退宿业务

发布时间:2026/8/6 23:18:22
SpringBoot+Vue 高校宿舍管理期末课程项目|JWT 认证 + 入住退宿业务 一、前言本文记录 Java Web 课程期末小组实训项目高校宿舍管理系统。项目全程借助 AI 工具辅助绘图代码模板文档润色报错排查所有业务流程架构逻辑均由本人独立设计编码调试落地。项目分工 AI 辅助边界说明 本人独立负责模块 1 AuthController 登录认证模块 JWT 鉴权 BCrypt 加密 角色拦截 2 学生入住退宿宿管审核核心业务模块 3 全套 MySQL 初始化 init.sql 数据库脚本 水电费设备报修文件上传等功能由小组其他组员完成本文不作介绍。AI 辅助范围仅工具辅助核心逻辑原创 流程图活动图时序图 Mermaid DrawIO 源码由 AI 生成业务分支判断逻辑由本人定义修改。 代码 AI 提供通用 CRUD 基础模板本人新增住宿专属拦截事务同步状态流转业务代码。 文档系统测试报告文章文字由 AI 润色测试场景用例全部由本人设计。 排错 SQL 语法代码报错由 AI 提供排查思路最终调试修复由本人完成。传统高校宿舍依靠纸质台账登记入住退宿登记效率低数据难以统计历史记录不易追溯。小组开发线上宿舍管理平台实现学生线上提交住宿申请宿管后台线上审核搭配完整角色鉴权体系规范化宿舍线上管理流程。二、项目技术栈后端 SpringBoot SpringMVC MyBatis-Plus MySQL8.0 JWT 令牌鉴权 BCrypt 密码加盐加密 Spring 声明式事务 前端 Vue3 Element Plus 开发辅助工具 Navicat DrawIO Mermaid三、整体分层架构三层自底向上依赖逻辑由本人梳理 底层 MySQL 数据库本人编写 init.sql 建表脚本定义主键外键状态约束。 中间层 Auth 认证模块统一身份校验角色隔离为所有业务接口做权限拦截。 上层入住退宿核心业务依赖鉴权数据库完成完整业务闭环。四、模块一 AuthController 登录认证模块4.1 模块功能概述系统全局身份校验入口实现登录注册图形验证码校验 JWT 令牌下发全局接口鉴权。划分三类角色做权限隔离 学生仅可访问个人住宿入住退宿申请接口 宿管拥有申请单据审核住宿记录查询权限 管理员拥有系统全部操作权限4.2 自主设计核心流程登录流程前端提交账号密码验证码校验验证码BCrypt 比对加密密码校验通过生成携带用户角色的 JWT 令牌。 全局拦截所有业务接口前置校验 Token未登录令牌过期角色不符直接拦截。 安全设计拒绝明文存储密码BCrypt 自带随机盐相同密码生成不同密文降低账号泄露风险。4.3 核心登录接口代码java运行RestController RequestMapping(/auth) public class AuthController { Autowired private UserService userService; Autowired private JwtUtil jwtUtil; // 用户登录接口 PostMapping(/login) public R login(RequestBody LoginDTO loginDTO){ // 图形验证码校验 本人新增业务校验逻辑 if(!CaptchaUtil.check(loginDTO.getCaptcha())){ return R.error(图形验证码错误); } // 根据用户名查询账号 UserEntity user userService.getOne(new LambdaQueryWrapperUserEntity() .eq(UserEntity::getUsername,loginDTO.getUsername)); if(user null){ return R.error(账号不存在); } // BCrypt密文比对密码 if(!BCrypt.checkpw(loginDTO.getPassword(),user.getPassword())){ return R.error(密码错误); } // 生成携带角色JWT 本人新增角色字段用于权限拦截 String token jwtUtil.generateToken(user.getId(),user.getRole()); MapString,Object map new HashMap(); map.put(token,token); map.put(userInfo,user); return R.ok(map); } }4.4 模块解决的业务问题1 拦截未登录用户直接调用后端接口2 角色隔离杜绝学生越权执行审核操作3 加密存储密码规避明文泄露安全隐患五、模块二 入住退宿核心业务5.1 完整业务闭环学生端浏览空闲宿舍提交入住申请系统自动拦截重复申请满房申请。在住学生可发起退宿申请。 宿管端查看全部待审核入住退宿单据支持审核通过驳回。 数据联动审核通过自动修改宿舍入住人数学生住宿状态驳回不修改房间数据。5.2 本人原创业务约束1 同一学生不可同时存在待审核已入住单据禁止重复提交入住 2 宿舍人数达到容量上限无法提交入住申请 3 无有效在住记录无法发起退宿 4 存在未审核退宿单不可重复提交退宿5.3 核心难点 Spring 事务实现多表数据一致审核操作需要同时更新 dorm_room 房间表 dorm_assignment 住宿申请表两张表无事务会出现单表更新成功另一表失败脏数据。本人使用 Transactional 声明式事务保证操作原子性。java运行Service public class DormAuditServiceImpl implements DormAuditService { Transactional(rollbackFor Exception.class) Override public R audit(Long applyId,Integer auditStatus,String remark){ // 查询申请单据 DormAssignment assignment this.getById(applyId); if(assignment null){ return R.error(单据不存在); } // 入住申请审核通过 if(assignment.getType() 1 auditStatus 1){ assignment.setStatus(2); this.updateById(assignment); DormRoom room roomService.getById(assignment.getRoomId()); room.setCurrentNum(room.getCurrentNum()1); roomService.updateById(room); } // 退宿申请审核通过 else if(assignment.getType() 2 auditStatus 1){ assignment.setStatus(3); this.updateById(assignment); DormRoom room roomService.getById(assignment.getRoomId()); room.setCurrentNum(room.getCurrentNum()-1); roomService.updateById(room); } // 审核驳回 else { assignment.setStatus(4); this.updateById(assignment); } return R.ok(审核完成); } }5.4 页面截图说明1 学生端空闲宿舍列表2 入住申请提交弹窗3 重复申请拦截提示弹窗4 宿管后台待审核单据列表5 审核操作弹窗六、模块三 MySQL 数据库设计6.1 核心数据表说明1 sys_user 用户表 存储学生宿管管理员 role 区分角色 password 加密存储2 dorm_room 宿舍房间表 记录房间最大容量 当前入住人数3 dorm_assignment 住宿分配核心表 type 区分入住退宿 status 标记单据状态6.2 核心建表 SQL 示例sql-- 住宿分配核心业务表 CREATE TABLE dorm_assignment ( id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT 主键id, user_id BIGINT NOT NULL COMMENT 学生用户id, room_id BIGINT NOT NULL COMMENT 宿舍房间id, type TINYINT NOT NULL COMMENT 1入住申请 2退宿申请, status TINYINT NOT NULL COMMENT 1待审核 2已入住 3已退宿 4驳回, create_time DATETIME DEFAULT NOW() COMMENT 提交申请时间, audit_time DATETIME NULL COMMENT 审核时间, remark VARCHAR(255) NULL COMMENT 审核备注, FOREIGN KEY (user_id) REFERENCES sys_user(id), FOREIGN KEY (room_id) REFERENCES dorm_room(id) ) ENGINEInnoDB DEFAULT CHARSETutf8mb4 COMMENT 住宿申请表;七、开发踩坑总结1 审核完成房间人数与实际住宿记录对不上 解决自主添加 Spring 事务注解多表操作原子化。2 学生可无限重复提交入住申请 解决业务层增加单据状态查询判断拦截重复提交3 前端跳过页面直接调用审核接口 解决基于 JWT 拦截器做角色校验限制学生无审核权限。4 密码明文存储存在安全风险 解决引入 BCrypt 加密工具登录密文比对不存储原始密码。八、AI 辅助范围说明绘图辅助 活动图时序图 Mermaid DrawIO 源码由 AI 生成业务流程分支判断规则由本人定义修改。 代码辅助 AI 提供通用 CRUD 模板住宿业务拦截人数同步状态流转代码为本人新增。 文档辅助 系统测试报告文章文字由 AI 润色测试场景用例全部由本人设计。 排错辅助 SQL 语法代码报错由 AI 提供排查思路调试修复由本人完成。 核心原创内容 整体业务流程重复申请拦截事务同步数据库状态角色权限逻辑全部由本人独立构思编码调试。