完善用户登陆功能
就对密码进行md5加密处理
1.改数据库内部的密码,改成md5加密后的
2.改Service的逻辑,将传过来的进行md5加密后再比较(controller是发令牌,和返回VO对象那逻辑)
先更新数据
如果不改java代码进行登陆,肯定会失败,顺便看看我们的异常机制
我们new了一个我们建的异常
这里直接是传了一个常量消息
全局异常捕获类
会在日志输出对应的异常消息
并且会把这个消息封装到Result返回给前端
这就是我们定义的消息常量类
现在我们更改一下Java的逻辑代码
这样即可
导入接口文档
就将我们的接口文档导入接口管理平台方便查阅
实际开发接口文档设计是很复杂的,需要多次开会商讨等
前后端分离开发的流程
导入线上的接口管理平台
我这里用的是Apifox
Swagger
这个工具可以根据接口文档生成在线接口调试文档
代替Postman
但直接使用Swagger还是比较繁琐
所以我们需要用到Knife4j框架
这些配置都是一些固定代码
记住每个是干什么的进行
apiInfo就是设置生成接口文档的标题,描述,版本
然后docket扫描我们需要生成接口文档的包(一般是controller)
扫描一定要正确
设置静态资源映射
也就是生成接口文档的指定路径
这个是一定要设置的
有点牛的
就是这是直接生成到对应的网页同时也部署到服务器上
比如我们的网页端口不是8080吗
然后这个是在脉冲项目运行前会输出一遍
我们只需要用服务器访问
https://localhost:8080/doc.html
这就是Knife4j框架生成出来的
在这个界面进行接口测试
常用注解
对应的更改产生的效果
用椭圆标出的部分就是
新增员工代码开发
初步开发
controller
Service
Mapper
没有变,因为我导入了一个Mybatisplus的依赖,然后就直接用哪个现成方法了
需要注意的是,需要在对应的employee类上设置id生成策略为IdType.AUTO,进行自增,还有用父工程进行统一依赖版本管理就可以
调试
用Swagger进行调试,开发阶段用Swagger,设计阶段用接口平台
注意:第一次请求会失败,因为我们配置了拦截器进行JWT令牌的拦截,需要我们在请求头上加上对应的token即JWT令牌,怎么获取呢?看下图
配置全局参数
然后进行员工新增的调试
注意:我们用mp的话,insert是有什么参数就会insert什么参数(会直接指定id),所以我们直接把id删了就行,不像mybatis是自己定义的,只会添我们想要的参数(就算指定id但是不会添加对应值,相当于null,还是自增)
测试结果
完善
问题1:用全局异常处理器进行处理(因为后面的更改也可能遇到这个问题)
根据报错的信息Duplicate entry即重复的键值对来筛选错误为用户名冲突错误
然后找对应的重复字符串返回错误信息即可
问题2:获取对应操作用户的ID
怎么获取呢,看传过来的内容全是关于新增员工的数据,这些数据和我们操作员工没有关系
然后另寻他路,我们就用用请求头中的JWT令牌
在JWT令牌拦截器中获取过对应的ID
那么如何传递给我们的save方法呢?
涉及到一个新的技术点
ThreadLocal
先理解一下
每一次请求都是同一个线程,比如一次请求,拦截器,controller,service
都是同一个线程
同一个线程,信息当然是共享的,我们通过ThreadLocal来进行信息共享,然后恰好我们在拦截器会用到JWT令牌进行校验
定义一个工具类
来创建我们的ThreadLocal对象,存储一些方法
一般使用这个类都是进行一个简单的封装比如这个BaseContext
在我们的拦截器增添一行代码
这样就ok了
在这里声明一下为什么这个ThreadLocal是同一个
首先作为静态变量创建对象,肯定是一个对象
这个对象可以为不同的线程来生成多个存储空间
线程A作为一个空间,线程B就是另一个空间推测