项目介绍
准备工作
创建数据表
创建项目
添加依赖
创建对应目录
除了基本的数据层mapper,业务层service,交互层controller,还创建了公共类的层common,枚举类层enums,异常类层,和实体类层pojo。
配置项目配置文件
准备前端页面
将前端页面复制到static目录下
测试
项目公共模块
统一返回格式



@AllArgsConstructor 这个注解来形成包括所有成员变量的构造函数,定义了两个枚举常量。
pojo是所有实体类的合集,差不多是这意思,现在的实体类分的很细,和数据库交互的实体类,接收的实体类,返回的实体类,有了更细的分层。
定义了三个成员变量,第一个就是定义的枚举类,表示了这个返回数据的状态,errMsg是业务错误时的是什么错误原因,data是返回数据正确时填充的交给前端的数据。并且实现了两个返回该类型的方法,一个是错误方法返回一个状态码为错误的result对象,一个是成功方法返回一个状态码为正确的result对象。这会在统一返回格式用到。
统一返回结果
在公共类创建统一返回结果的处理类。
对所有的返回结果进行了处理,如果返回格式不是result类,就进行包装成result类返回,是result类就直接返回,string类需要另外的处理。
统一异常处理
创建异常类
只要继承了异常类,那么这个类就可以视为自定义的一个异常类,里面的成员变量和方法都是看需求自定义的。
统一异常处理类
目前只创建了针对两个异常的处理,都是先写入日志,然后再将异常里填充的错误信息交给Result类当中的错误方法来返回一个业务状态码为错误的result对象。
业务代码
持久层
先创建两个基于不同实体类和数据库交互的类
先暂时的使用mybatis-plus所提供的方法,如果需要其他的方法那就另外实现。
实现博客列表
首先在controller层实现前端接口
实现业务层代码
在业务层为了更好的解耦,需要先定义接口,再通过impl实现类来实现接口的方法。
规范当中,只给前端需要的数据,而直接从数据库取出的数据,多了一些不需要的属性,那么就需要另外定义一个类来返回给前端。
将更新时间和是否删除这两个字段删除了。
实现博客详情
controller层
service层
实体类的Date日期属性中,想要指定格式可以通过这个注解。
当为null时,会报异常,那么就可以在异常统一处理将这个异常进行处理。
实现登录
所以要使用令牌技术。
令牌技术
令牌的校验并不是由服务端进行校验的,而是通过提供的令牌校验接口来校验,所以不管是哪个服务器,都有校验令牌是否有效的能力。
JWT令牌
令牌本质就是—个字符串, 他的实现⽅式有很多, 我们采⽤—个JWT令牌来实现.
介绍
JWT全称: JSON Web Token
官⽹: https://jwt.io/
JSON Web Token(JWT)是—个开放的⾏业标准(RFC 7519), ⽤于客⼾端和服务器之间传递安全可靠的信息.
其本质是—个token, 是—种紧凑的URL安全⽅法.
JWT组成
JWT令牌生成和校验
引入依赖
生成令牌
这一串就是生成key依赖的字符串密钥。
校验令牌
创建请求和响应的实体类
传递的参数为对象的时候,参数校验可以使用这两个注解在类里面对成员变量进行注解校验,message是不满足条件时报异常的字符串,length是检验属性长度的,max是最长,min是最短。
实现controller
这次交互使用body进行交互,body的默认格式就是json,接收body参数需要用requestbody注解,而想要之前在实体类的注解起效,需要在对象旁边加一个validated注解。
实现service
先构造出wrapper条件,再使用mybatis-plus实现的持久层方法来查询用户,再对密码进行校验,最后将业务需要的字段填充进令牌token里,这是看业务需求来选择填充哪些的。
接口测试
成功。
实现强制要求登录
当⽤户访问 博客列表页 和 博客详情页 时, 如果⽤户当前尚未登陆, 就⾃动跳转到登陆页⾯. 我们可以采⽤拦截器来完成, token通常由前端放在header中, 我们从header中获取token, 并校验 token是否合法。
先创建一个拦截器,和前端约定好,将token从header上传递,然后对这个token进行检验,如果没有token或者token不正确都会抛异常,经过检验后没有问题就允许访问。
定义拦截路径
将除了登录页面以外的所有页面都拦截。
测试
不携带token
携带正确token
实现显示用户信息
实现用户退出
实现发布博客
实现删除/编辑博客
编辑和删除是只有帖子博主才能操作,所以需要前端来判断是否要显示这两个接口。
加密/加盐
一般还需要重新得到的密码就用对称和非对称加密算法,如果不需要再用到,只需要进行核验的话一般用到摘要算法。
加密算法可以任意选择,重要的是概念,会通过算法来形成一个盐,这个盐会和密码一起以某种方式组合在一起然后加密形成密文,数据库中保存的是密文和盐,当注册好后,再次登录,那么拿的就是明文再加上数据库中保存的盐来形成密文,和数据库中的密文进行校验,相等就视为密码正确。