设计说明
采用Readme文档形式说明来涉及的技术点
环境安装
npm i axios
npm install vue-router@4
npm install element-plus --save
设计要求及说明
数据库: book 编码utf-8
后端端口: 8081
前端端口: 8080
1、登录
采用token鉴定是否登录、采用在header存放username、password鉴定身份
至于记住我、单点登录等功能, 可单独再设计, 不用放在这一个模块中(且这部分设计逻辑会复杂一些, 记住我可简单的通过在前端浏览器的localStorage中存储用户信息, 然后每次进入首页都先自动登陆一下, 这样的设计是相对简单的; 另一种是在后端接口去拿cookies, 然后手动去判断用户是否登录, 这样的设计需要再添加一个拦截器, 设计相对复杂些)
单点登录可以考虑结合Redis集群进行项目搭建, 不同服务间共用缓存信息, 可查到用户的登陆情况, 这个一般用于大型项目
2、权限控制
采用自定义注解实现
3、分层
常规的分层, 即controller、entity、mapper、service(由于采用mybatis-plus), 这样的分层也较为清晰
4、日志
通过拦截器实现日志记录
5、缓存
使用redis作为缓存, 用于存放token, 及一些图书数据(设置半小时内访问未达到十次则进行清除, 只保存十次及以上访问次数的图书信息, 这样达到记录热点数据的情况, 当经过半小时未被清除, 则重新计数和设置过期时间)
6、数据库
考虑到结合mybatis-plus一起使用, 所以采用mysql作为数据库(实际MySQL的部署应用也已经非常方便了)
7、配置分离
参考文章: https://blog.csdn.net/qq_35031260/article/details/103693566
意思是指: 开发环境和上线环境需要分开, 写两个配置文件再在application.properties文件里面设置一下即可
8、swagger
接口文档的生成, 由于拦截器的存在, 只在开发时进行文档的查看(需要关闭拦截器才可进行查看), 实际使用并不多, 一般都结合postman或前端界面进行测试
9、RestFul风格的API
实际上很多使用中并不会完全按照这个风格, 主要是因为这个风格能够描述的接口数量太少, 只有常用的增删改查, 当涉及别的接口时, 会不得不用英文路径名以示区分及描述
本图书管理系统设计的接口数量较少(后续可再补充):
(1): /user/login (post请求)
(2): /user/register (post请求)
(3): /user/logout (get请求)
(4): /book (get请求)
(5): /book (post请求)
(6): /book (put请求)
(7): /book (delete请求)
其中为了达到演示权限处理的功能, 对 (2) (5)(6)(7) 接口设置了仅能管理员访问, 通过自定义注解及拦截器实现
本项目仅供功能模拟, 实际使用中管理员端会单独再设计一个模块与一套前端页面, 不会与一般用户使用的系统冗余, 这里的权限设计也就没有很实际的用途
一般的权限设计, 在角色较多且菜单较多(即功能较为丰富)时, 会对不同的的角色分配不同的菜单, (可参考网站: 禅道 https://www.chandao.net/), 在这个系统的设计中, 就涉及了较多的角色, 并给它们分配不同的菜单, 实际用途比较好
另外, 本系统并未对接口进行限流、白名单、黑名单等处理, 该功能均可通过拦截器实现, 当然也可结合Sentinel框架进行更好的实现, 该框架的拦截算法值得学习学习(令牌桶算法), 当然也可以手动模拟令牌桶算法(采用Redis实现)
后端项目搭建
设计当前还未解决的小问题
前端页面的表格的el-table的宽度问题
当打开控制台,会报错,是谷歌浏览器自带的功能,比较烦的,原因是Element-plus的代码有一些bug
只需要点击叉掉就好了
前端页面结构
代码下载
目录结构
链接:https://pan.baidu.com/s/1V0JAZNIWFsEP8svEQFgHaw
提取码:0925
代码说明
在写的时候需要注意以下几点:
1、数据库字段的长度在Java代码中也需要验证,这是一个好习惯
2、前后端通信格式要保持统一;采用Result进行封装
3、采用Redis用做缓存,这里只是演示,实际的使用会更加复杂
4、权限模型这里只是初步搭建,采用自定义注解和拦截器实现是不错的想法