# studyroom-cloud **Repository Path**: zruei/studyroom-cloud ## Basic Information - **Project Name**: studyroom-cloud - **Description**: 自习室预约系统微服务版本 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-06-17 - **Last Updated**: 2025-06-07 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # studyroom-cloud:自习室预约系统微服务版本(前后端分离) ## 技术栈: Java17、SpringBoot、MyBatis-Plus、SpringSecurity、Nacos、Spring Cloud GeteWay、Openfeign、MySql8.0、Redis、Vue3 ## 运行 1. 前置条件:修改各服务连接信息,nacos服务添加共享配置文件、导入mysql数据库文件、启动redis服务 2. npm run dev运行前端项目 3. 运行网关服务、自习室预约服务、用户管理服务、自习室管理服务 ## 项目结构: StudyRoom-Cloud:父工程,统一管理依赖 - studyroom-api:存放服务po实体和feign客户端 - studyroom-common:通用模块 - studyroom-common-core:核心通用模块,存放公共资源 - studyroom-common-redis:redis工具模块 - studyroom-common-security:安全模块 - studyroom-common-sendmsg:发送信息模块 - studyroom-common-uploadfile:上传文件模块 - studyroom-geteway:网关服务 - studyroom-modules:系统服务 - studyroom-reservation:自习室预约服务 - studyroom-room:自习室管理服务 - studyroom-user:用户管理服务 - studyroom-ui:前端工程 - studyroom-other:其他相关文件 - nacos-shared-config:nacos共享配置文件 - studyroom-doc:相关文档 - studyroom-sql:mysql数据库文件 ## 相对于自习室预约系统单体项目变化: 1. 用户登录从用户名密码登录改为手机号密码登录,普通用户注册增加手机号验证码验证功能 ![image](studyroom-other/studyroom-images/update1.png) 2. 减少预约日期和预约时段数据库表,改用前端静态数据方式,利用element plus日期选择器实现 ![image](studyroom-other/studyroom-images/update2.png) 3. 网关做token认证校验,下游服务内做接口鉴权 ## 认证鉴权方案 1. 网关放行登录接口,登录接口利用SpringSecurity做用户名和密码认证,认证成功保存用户信息到redis,返回给前端token 2. 网关实现全局过滤器,实现对token拦截校验操作,校验成功将token下发到下游服务 3. 下游服务拦截网关下发的token,根据token到redis查询用户信息保存到SpringSecurity上下文,利用SpringSecurity实现鉴权 ## 遇到的问题及解决方案 1. 微服务信息不共享:利用redis中间件 2. 微服务接口不统一:利用网关统一接口,前端请求网关,网关路由到对应服务 3. 一个数据库一个微服务,如何实现联表查询:无法联表查询,利用服务暴露的feign客户端,发送请求获得接口数据,手动设置数据 4. 后端接口具有权限,feign客户端需要携带token:在下游服务拦截网关token时将token设置给feign请求头 5. 重复配置通过nacos抽取到远程,通过bootstrap拉取到本地 6. 模块集成包名不同,SpringBoot无法自动装配:手动实现自动装配(推荐:后续集成改模块都不需要配置包扫描)或启动类加包扫描注解(每个用到改模块的都需要写)或统一包名(不推荐:难以区分)