JavaEE-博客系统项目

发布于:2025-07-03 ⋅ 阅读:(24) ⋅ 点赞:(0)

项目介绍

准备工作

创建数据表

创建项目

添加依赖

创建对应目录

除了基本的数据层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

 

实现显示用户信息

实现用户退出

实现发布博客

实现删除/编辑博客

 

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

加密/加盐

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

 

 

 

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


网站公告

今日签到

点亮在社区的每一天
去签到