当前位置: 首页 > news >正文

JavaEE-博客系统项目

项目介绍

准备工作

创建数据表

创建项目

添加依赖

创建对应目录

除了基本的数据层mapper,业务层service,交互层controller,还创建了公共类的层common,枚举类层enums,异常类层,和实体类层pojo。

配置项目配置文件

准备前端页面

将前端页面复制到static目录下

测试

项目公共模块 

统一返回格式

项⽬分为控制层(Controller), 服务层(Service), 持久层(Mapper). 各层之间的调⽤关系如下:
统一返回结果实体类。
先创建好一个枚举类
定义了一个成员变量,枚举类有了成员变量就需要实现构造函数,使用 

@AllArgsConstructor 这个注解来形成包括所有成员变量的构造函数,定义了两个枚举常量。

pojo是所有实体类的合集,差不多是这意思,现在的实体类分的很细,和数据库交互的实体类,接收的实体类,返回的实体类,有了更细的分层。

定义了三个成员变量,第一个就是定义的枚举类,表示了这个返回数据的状态,errMsg是业务错误时的是什么错误原因,data是返回数据正确时填充的交给前端的数据。并且实现了两个返回该类型的方法,一个是错误方法返回一个状态码为错误的result对象,一个是成功方法返回一个状态码为正确的result对象。这会在统一返回格式用到。

统一返回结果

在公共类创建统一返回结果的处理类。

对所有的返回结果进行了处理,如果返回格式不是result类,就进行包装成result类返回,是result类就直接返回,string类需要另外的处理。 

统一异常处理

创建异常类

只要继承了异常类,那么这个类就可以视为自定义的一个异常类,里面的成员变量和方法都是看需求自定义的。

统一异常处理类

目前只创建了针对两个异常的处理,都是先写入日志,然后再将异常里填充的错误信息交给Result类当中的错误方法来返回一个业务状态码为错误的result对象。

业务代码

持久层

先创建两个基于不同实体类和数据库交互的类

先暂时的使用mybatis-plus所提供的方法,如果需要其他的方法那就另外实现。

实现博客列表

首先在controller层实现前端接口

实现业务层代码

在业务层为了更好的解耦,需要先定义接口,再通过impl实现类来实现接口的方法。

规范当中,只给前端需要的数据,而直接从数据库取出的数据,多了一些不需要的属性,那么就需要另外定义一个类来返回给前端。

将更新时间和是否删除这两个字段删除了。

实现博客详情

⽬前点击博客列表⻚的 "查看全⽂" , 能进⼊博客详情⻚, 但是这个博客详情⻚是写死的内容. 我们期望能够根据当前的 博客 id 从服务器动态获取博客内容.

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

 

实现显示用户信息

实现用户退出

实现发布博客

实现删除/编辑博客

 

编辑和删除是只有帖子博主才能操作,所以需要前端来判断是否要显示这两个接口。

加密/加盐

一般还需要重新得到的密码就用对称和非对称加密算法,如果不需要再用到,只需要进行核验的话一般用到摘要算法。

 

 

 

加密算法可以任意选择,重要的是概念,会通过算法来形成一个盐,这个盐会和密码一起以某种方式组合在一起然后加密形成密文,数据库中保存的是密文和盐,当注册好后,再次登录,那么拿的就是明文再加上数据库中保存的盐来形成密文,和数据库中的密文进行校验,相等就视为密码正确。

http://www.lqws.cn/news/604675.html

相关文章:

  • 不引入变量 异或交换的缺点
  • 模板编译原理
  • OpenLayers 入门指南:序言
  • TEXT Submitting Solutions
  • SpringBoot中RocketMQ的使用教程
  • 记一次finallshell.exe打开无法应的处理
  • CKS-CN考试之路----13
  • 多项式带余除法——线性代数题目为例
  • react调用打印机自定义样式
  • mysql语句练习
  • [CS创世SD NAND征文] 精准控制的坚固基石:CS创世SD NAND在华大HC32F4A0运动控制卡中的高可靠应用
  • React 学习(2)
  • Linux下MinIO分布式安装部署
  • 大语言模型随意猜测网址引发网络安全危机
  • 深入理解装饰器模式:动态扩展对象功能的灵活设计模式
  • 软考高项一次过,个人经验总结
  • Docker:容器化技术的基石与实践指南
  • 【字节跳动】数据挖掘面试题0003:有一个文件,每一行是一个数字,如何用 MapReduce 进行排序和求每个用户每个页面停留时间
  • MinHook 如何对 .NET 母体 CoreCLR 进行拦截
  • 【Unity】MiniGame编辑器小游戏(九)打砖块【Breakout】
  • 深入解析外观模式(Facade Pattern):简化复杂系统的优雅设计
  • Cursor推出全平台AI编程代理,Ultra订阅200美元/月,支持跨设备多任务
  • 123页满分PPT | 华为流程体系建设与运营华为数字化转型流程解决方案及建设案例
  • mars3d (基于 Cesium 的轻量化三维地图库)
  • 老版本 dubbo 泛化调用
  • MiniMind(2)模型架构
  • Java学习第五部分——API部分
  • docker离线/在线环境下安装elasticsearch
  • 多云密钥统一管理实战:CKMS对接阿里云/华为云密钥服务
  • Gin 框架中的优雅退出