写在前面
在学习苍穹外卖过程中,弹幕常有 “为什么我打不开?为什么我没有输出?”的疑问,针对这些我也在学习过程中同样遇到的问题,万分感激在弹幕中找到了答案,并作出这系列汇总。本文内容是基于弹幕对苍穹外卖项目的实施与补充,仅供学习与分享之用,如有侵权请联系删除~
2024-07-03
开发环境
IDEA2021.3.1、JDK17、Navicat Premium 15、Gitee
部署远程仓库 => 创建数据库 (跟着视频做就完了)
目录
数据库各表结构总览
连接数据库
创建好数据库后,双击ngnix开启代理,在src/main/resources/application-dev.yml的该文件中修改数据库账号密码:
用maven完成编译
在浏览器导航栏输入localhost+回车,启动!!!!
前端数据传到后端如何操作?
请求发送到后端 ==> 调用controller ==> 调用service ==> 调用mapper ==>
将用户名作为参数,在数据库查询对应的用户 ==> 如果有该用户 ==> 判断状态未锁定 ==> 返回实体对象 ==> 生成JWT令牌 ==> 封装成VO对象,返回前端
体现了三层架构思想:
JwtProperties类
在生成JWT令牌这一步骤中,可以看到注入的JwtProperties类
在JwtProperties类中:
@Component
:将这个类标记为 Spring 组件,使其能够被 Spring 容器扫描和管理。@ConfigurationProperties(prefix = "sky.jwt")
:指定从配置文件中读取的属性前缀为sky.jwt
,使得该类的属性与配置文件中的参数绑定。@Data
:使用 Lombok 提供的注解,自动生成该类的 getter、setter、toString、equals 和 hashCode 方法。在src/main/resources/application.yml该文件中可见相应配置
employeeLoginVO
生成JWT令牌生成token后,采用builder封装VO,返回给前端
来看看employeeLoginVO
主要目的:
- 封装登录返回数据:
- 将员工登录后的关键信息(如
id
、userName
、name
和token
)封装成一个对象,以便于在前后端进行数据传输。- 便于序列化和反序列化:
- 实现
Serializable
接口,便于对象的序列化(例如,将对象转换为字节流传输)和反序列化。注解:
![]()
本项目为什么要使用ngnix服务?
1)访问ngnix层,可以缓存接口返回数据,不必反复请求后端
2)将大量请求按指定方式均衡的分配给集群中的每台服务器
3)隐藏后端服务器的真实地址
前面都是帮助理解,不需要编写代码
在用户登陆时,初始项目中,数据库采用明文记录用户密码,这样并不安全。
所以,我们需要对客户的密码进行加密,根据上述的三层架构思想,应该对实现类进行修改。
- 修改数据库中明文密码,改为MD5加密后的密文
- 修改Java代码,前端提交的密码进行MD5加密后再跟数据库中密码比对
仅展示了员工登录功能代码,对前端明文密码MD5加密存入数据库应属于注册功能~
为什么不直接在前端进行加密?
- 安全性问题:密钥泄露;
- 加密算法的实施:计算机性能问题;
- 数据传输的安全性:传输过程泄露;
后端优势:
- 更安全的环境:访问控制、密钥安全性更高;
- 集中控制和更新:加密策略一致性、便于维护;
- 简化前端开发:减少负担、提高性能;
以上是修改员工登录功能,编写代码部分结束~
导入接口文档
使用YApi Pro:YApi Pro-高效、易用、功能强大的可视化接口管理平台
(导入步骤跟着视频做就完了~)
使用knife4j实现swagger生成接口文档测试
在sky-server/pom.xml该文件中导入依赖(一般是固定写法)
在src/main/java/com/sky/config/WebMvcConfiguration.java文件中完成配置
加入 knife4j 相关配置
.apis(RequestHandlerSelectors.basePackage("com.sky.controller.admin")) 配置扫描controller的地址设置静态资源映射
设置静态资源映射,如果不设置,在MVC框架里,会认为你请求的地址是controller
常用的Swagger的注解
用在controller上
用在方法上(如图为 员工登录方法)
用在类、属性上
在浏览器输入地址 http://localhost:8080/doc.html ,启动 !!!!!!