电子书网站 - Java/Vue3
项目介绍
- 基于SprintBoot/MyBatis/Vue3的电子书管理网站,功能包括身份认证系统 (单点登录),用户管理,电子书管理等.
- 前端是使用 Vue3/AntDesign 开发的单页应用,使用 vue-router 路由与 axios 调用后端请求.
- 使用了Redis + Token来实现简化版的单点登录.
数据库
表结构
- category表 (id, parent, name, sort) → 电子书分类的数据和层级
- user表 (id, login_name, name, password)
- doc表 (id, ebook_id, parent, name, sort, view..) → 某电子书拥有的相关文档数据
- ebook表 (id, name, category, 描述...) → 电子书数据
数据库连接
使用IDEA集成的Database功能进行连接.
连接Localhost
输入Localhost的数据库的账号密码,即可完成连接.
连接云数据库

登录开发
登录
- 前端输入用户名密码
- 校验用户名密码
- 登录成功后,生成token (注意 topken的生成ID,要保证唯一)
- 后端保存
token (redis)={token1: 用户信息1, token2: 用户信息2 ....}
// 雪花算法生成token id
// long or string type 都可以
long token = snowFlake.nextId();
// 保存时效 = 3600s * 24hrs = 1day
redisTemplate.opsForValue().set(token.toString(), userLoginResp, 3600 * 24, TimeUnit.SECONDS);
- 前端保存token,使用vuex + sessionStorage来保存登录信息
校验
- 前端请求时,带上token(放在header)
- 登录 拦截器(or AOP),校验token (从redis中获取token,如果命中则有效)
LoginInterceptor
// 从请求的header中获取token
String token = request.getHeader('token');
if (token == null || token.isEmpty()) // 说明token为空
// 从redis中查找token
// redis查找的get()方法对类型有要求,必须一致
Object object = redisTemplate.opsForValue().get(token);
if (object == null) return false; // 没有命中
else return true; // 找到了
- 校验成功则继续后面的业务
- 校验失败则回到登录页面
Token 与 JSON Web Token
Token + redis: token本身无意义,只需要保持唯一性。可以用md5字符串. JWT: token是有意义的,加密的,包含业务信息与用户信息。不需要用到JWT.
e.g. JWT由3部分组成 = header :
{’alg(加密算法)’: ‘’HS256, ‘typ’: ‘JWT’}, data:{...}, signature:{签名}
Q&A
2.1 SpringBoot有哪些优点?
- 快速创建独立运行的Spring项目以及与主流框架集成
- 使用嵌入式的Servlet容器,应用无需打成WAR包
- starters自动依赖与版本控制
- 大量的自动配置,简化开发,也可修改默认值
- 无需配置XML,无代码生成,开箱即用
- 准生产环境的运行时应用监控
- 与云计算的天然集成