基于SpringBoot+Mybatis开发的分布式校园租赁系统
其他项目文档在project-docs目录下
├── project-database -- 数据库脚本
├── project-docs -- 项目文档
│ ├── application-private.yml.template -- 配置文件模板
│ ├── businessLogicAnalysis.md -- 业务逻辑分析文档
│ ├── businessLogicDesign.md -- 业务逻辑设计文档
│ ├── convention.md -- 项目约定文档
│ ├── development.md -- 开发文档
├── project-tools
│ └── mysql-es-sync -- mysql和elasticsearch数据同步工具
├── rentx-admin* -- 后台管理系统代码
├── rentx-common -- 后台管理系统和用户租赁系统公共代码
├── rentx-generator -- 代码生成器
├── rentx-web* -- 用户租赁系统代码
Spring Framework、SpringMVC、SpringBoot、MyBatis、Dubbo、Redis、Elasticsearch、Spring Security、Thymeleaf、Mysql、Websocket
Bootstrap、jQuery
- 安装Jdk1.8、redis、Elasticsearch、Logstash,并使用默认端口
- 配置系统环境变量,数据库密码(MYSQL_PASSWD)
- 将"project-docs"目录下"application-private.yml.template"文件复制到"rentx-web/src/main/resources"目录下,重命名"application-private.yml",并修改其配置
- 运行"project-database"目录下rentx-web.sql和rentx-admin.sql文件
- 生产环境配置dubbo注册中心
- 启动项目
- 开发:注释掉根pom文件中的"compile"一行,然后可以以任何方式启动
- 非开发:只能用maven方式启动,cd rentx-web & mvn spring-boot:run; cd rentx-admin & mvn spring-boot:run
- 用户租赁系统登录页面: http://localhost:9999/login/ (用户名/密码见development.md文件), 后台管理系统首页: http://localhost:9988/
大学生刚进入学校,不免会尝试一些新的东西,但并不是每样都是适合自己,租一件物品尝试一下可能好多人都想过。因此,一个可靠的校园租赁系统可以解决很多同学这个问题。
项目基于Java Web,前端用网页展现。该系统包括两个子系统:一是后台管理系统,供管理员使用。二是用户租赁系统,供出租人和承租人使用。非注册用户可以浏览可租赁物品信息。
- 分布式:为了解藕和提高扩展性,将系统拆分,普通用户租赁系统和后台管理系统分开部署,用户租赁系统封装出基础服务接口,使用Dubbo供后台管理系统远程方法调用,提高代码复用性。为保证可用性,普通用户租赁系统和后台管理系统都分别使用Docker集群部署(项目中暂无此内容)。
- 高安全性:考虑到系统可能遭到黑客攻击,从而导致系统宕机和用户隐私泄漏,系统对常见Web攻击做出防范。使用AOP技术进行XSS防御和敏感词过滤;使用验证码防暴力破解;使用预编译SQL防SQL注入;数据库存储经过bcrypt算法处理过的用户密码的哈希值防密码泄漏;使用SpringSecurity做角色权限控制。
基于AOP的安全防御模块:使用AOP进行XSS防御和敏感词过滤。考虑用户上传租赁物品信息等场景,用户可能上传攻击脚本和敏感词,系统对敏感词和XSS攻击做出防范。使用面向切面编程技术,将安全防御的代码从业务代码中分离,对于需要防御的地方只需要加上注解,使用切面拦截做安全处理,从而减少代码侵入性。
- 登录注册模块:
- 用户注册需要填写基本信息,使用邮箱注册。数据库存储经过bcrypt算法处理过的用户密码的哈希值,从而减少系统被拖库后用户密码暴露风险。
- 用户登录使用验证码防止用户暴力破解。
- 租用模块 - 承租人:
- 开始租用:用户可查看可租物品信息。用户对未被租用物品可执行租赁操作。
- 我的租用:用户可查看自己已租赁的物品清单,可执行取消申请租赁操作。
- 出租模块 - 出租人:
- 开始出租:出租人可以在相应的类别添加、修改自己要出租的物品信息。
- 我的出租:出租人可以查看自己的出租物品,还可以查看单个物品租用历史以及当前租用情况。
- 近实时的全文搜索模块:为提高大量物品信息搜索速度,解决数据库查询瓶颈,使用搜索引擎Elasticsearch强化搜索功能,对物品信息提供全文搜索功能,并可按类别筛选。
- 在线支付模块:对于租金、押金支持支付宝在线支付和查看支付状态,通过调用支付宝开放接口实现。
- 服务接口封装:封装用户租赁系统中通用接口,供后台管理系统RPC调用。
- 登录注册模块:后台管理员帐号密码由运维人员使用脚本手动存入数据库,登录功能复用用户租赁系统的部分代码。
- 角色权限管理:角色分为三类,分别管理员、出租人、承租人。管理员只能使用“后台管理系统”,出租人、承租人只能使用“用户租赁系统”。 系统使用Spring Security权限框架,把每个单独的权限和功能(URL+HTTP方法)挂钩。用户访问系统的某一个URL的时候,系统首先检查用目标URL是否和功能权限绑定,判断绑定了在校验用户的角色是否包含指定权限。
- 用户管理模块:管理员可以查看、修改用户信息。(暂未实现)
- 类别管理模块:管理员可以查看已有类别、修改类别、添加新类别和删除类别等。
- 物品管理模块:管理员可以在相应的类别下添加或修改物品信息,还可以查看物品信息和执行删除物品的操作。(暂未实现)
- 租用管理模块:管理员可以查看用户提交的租用申请信息,可批准和否定用户的租赁申请。当用户归还物品后,管理员可以执行归还操作。
- 统计报表模块:管理员可查看按类别时间查看物品租用情况的统计报表。
- 实时通信模块:基于Websocket实现实时通讯,用户可以和客服沟通租赁、支付等操作中出现的问题,出租人和承租人之间可在线沟通。(简单实现)
- 用户、物品、类别、物品ER图
- 用户、角色、资源、菜单ER图
游客用户输入用户名guset,密码guest即可登录,登录后可以查看可租用的物品列表,但不能执行租用操作