【项目实战】博客系统设计与实现

news/2024/11/18 2:49:14/

 一、项目概述

1.项目需求

前端:展示文章,文章分类,评论,用户登录。
后端 :系统管理:用户管理,菜单管理,角色管理。内容管理:文章管理,分类管理,标签管理 

2.总述 

此项目为Springboot项目,前后端分离,典型的单体架构,主要功能是对文章,分类评论 等业务进行管理,同时有权限管理的功能,能够进行权限分配。

3.技术栈选择

前端:Vue、ElementUI
后端:SpringBootMybatisPlusSpringSecurityEasyExcelSwagger2Redis OSS

4.环境介绍

数据库:mysql8.0.28
项目结构:maven
数据库连接池:Druid
前端框架:Vue
后端框架:SpringBoot,SpringSecurity
语言:Java
jdk版本:17
编写的IDE:IDEA

5.效果图展示

  

 

二、设计思路 

一般项目三层架构

由上图可以看到单体项目中大致的组成。
一般的单体应用都会分三层——数据库层,业务层,控制层,而我们这个博客系统也是如此。 

2.前后端交互示意图

 3.博客系统架构设计图

在看完了单体项目一般是如何架构之后,再来看看我们的系统架构图(由于业务比较少,所以这里可以直接把各个类写到上面)

项目前端分前端页面和后端页面

 和上面的差不多,只不过这里利用SpringSecurity实现了token机制来进行权限控制,同时用了点spring的aop来处理日志信息,以及利用自定义异常处理器处理全局异常信息,返回对应的错误响应。

4.响应格式

对于前后端分离的项目,响应格式必定是前后端交流非常重要的一环。

5.日志记录机制

利用spring的aop机制,我们可以轻松的在controller接口处理请求之前打印请求的相关信息到日志文件中。

6.鉴权服务设计与实现

关于此系统的鉴权服务,也就是我们常说的注册登录,我用的是SpringSecurity实现的一套简单的token机制,示意图如下:

验证机制

认证过滤器设计与实现

SpringSecurity认证授权异常处理设计与实现

认证失败处理器器,实现AccessDeniedHandler

 授权失败处理器器,实现AuthenticationEntryPoint

配置异常处理器

三、数据库设计

1.文章表(sg_article)

描述:文章表,存储文章

表结构:

序号

字段名

数据类型

主键

非空

默认值

描述

1

id

BIGINT(19)

2

title

VARCHAR(256)

标题

3

content

LONGTEXT

文章内容

4

summary

VARCHAR(1024)

文章摘要

5

category_id

BIGINT(19)

所属分类id

6

thumbnail

VARCHAR(256)

缩略图

7

is_top

CHAR(1)

0

是否置顶(0否,1是)

8

status

CHAR(1)

1

状态(0已发布,1草稿)

9

view_count

BIGINT(19)

0

访问量

10

is_comment

CHAR(1)

1

是否允许评论 1是,0否

11

create_by

BIGINT(19)

12

create_time

DATETIME

13

update_by

BIGINT(19)

14

update_time

DATETIME

15

del_flag

INT(10)

0

删除标志(0代表未删除,1代表已删除)

2.文章标签关联表(sg_article_tag)

 描述:文章标签关联表

序号

字段名

数据类型

主键

非空

默认值

描述

1

article_id

BIGINT(19)

文章id

2

tag_id

BIGINT(19)

0

标签id

3.分类表(sg_category)

 描述:文章分类表

表结构:

序号

字段名

数据类型

主键

非空

默认值

描述

1

id

BIGINT(19)

2

name

VARCHAR(128)

分类名

3

pid

BIGINT(19)

-1

父分类id,如果没有父分类为-1

4

description

VARCHAR(512)

描述

5

status

CHAR(1)

0

状态0:正常,1禁用

6

create_by

BIGINT(19)

7

create_time

DATETIME

8

update_by

BIGINT(19)

9

update_time

DATETIME

10

del_flag

INT(10)

0

删除标志(0代表未删除,1代表已删除)

4.评论表(sg_comment)

描述:评论表

表结构:

序号

字段名

数据类型

主键

非空

默认值

描述

1

id

BIGINT(19)

2

type

CHAR(1)

0

评论类型(0代表文章评论,1代表友链评论)

3

article_id

BIGINT(19)

文章id

4

root_id

BIGINT(19)

-1

根评论id

5

content

VARCHAR(512)

评论内容

6

to_comment_user_id

BIGINT(19)

-1

所回复的目标评论的userid

7

to_comment_id

BIGINT(19)

-1

回复目标评论id

8

create_by

BIGINT(19)

9

create_time

DATETIME

10

update_by

BIGINT(19)

11

update_time

DATETIME

12

del_flag

INT(10)

0

删除标志(0代表未删除,1代表已删除)

5.友链(sg_link)

描述:友链

表结构:

序号

字段名

数据类型

主键

非空

默认值

描述

1

id

BIGINT(19)

2

name

VARCHAR(256)

3

logo

VARCHAR(256)

4

description

VARCHAR(512)

5

address

VARCHAR(128)

网站地址

6

status

CHAR(1)

2

审核状态 (0代表审核通过,1代表审核未通过,2代表未审核)

7

create_by

BIGINT(19)

8

create_time

DATETIME

9

update_by

BIGINT(19)

10

update_time

DATETIME

11

del_flag

INT(10)

0

删除标志(0代表未删除,1代表已删除)

6.标签(sg_tag)

描述:文章标签

表结构:

序号

字段名

数据类型

主键

非空

默认值

描述

1

id

BIGINT(19)

2

name

VARCHAR(128)

标签名

3

create_by

BIGINT(19)

4

create_time

DATETIME

5

update_by

BIGINT(19)

6

update_time

DATETIME

7

del_flag

INT(10)

0

删除标志(0代表未删除,1代表已删除)

8

remark

VARCHAR(500)

备注

7.菜单权限表(sys_menu)

描述:菜单权限表

表结构:

序号

字段名

数据类型

主键

非空

默认值

描述

1

id

BIGINT(19)

菜单ID

2

menu_name

VARCHAR(50)

菜单名称

3

parent_id

BIGINT(19)

0

父菜单ID

4

order_num

INT(10)

0

显示顺序

5

path

VARCHAR(200)

路由地址

6

component

VARCHAR(255)

组件路径

7

is_frame

INT(10)

1

是否为外链(0是 1否)

8

menu_type

CHAR(1)

菜单类型(M目录 C菜单 F按钮)

9

visible

CHAR(1)

0

菜单状态(0显示 1隐藏)

10

status

CHAR(1)

0

菜单状态(0正常 1停用)

11

perms

VARCHAR(100)

权限标识

12

icon

VARCHAR(100)

#

菜单图标

13

create_by

BIGINT(19)

创建者

14

create_time

DATETIME

创建时间

15

update_by

BIGINT(19)

更新者

16

update_time

DATETIME

更新时间

17

remark

VARCHAR(500)

备注

18

del_flag

CHAR(1)

0

8.角色信息表(sys_role)

描述:角色信息表

表结构:

序号

字段名

数据类型

主键

非空

默认值

描述

1

id

BIGINT(19)

角色ID

2

role_name

VARCHAR(30)

角色名称

3

role_key

VARCHAR(100)

角色权限字符串

4

role_sort

INT(10)

显示顺序

5

status

CHAR(1)

角色状态(0正常 1停用)

6

del_flag

CHAR(1)

0

删除标志(0代表存在 1代表删除)

7

create_by

BIGINT(19)

创建者

8

create_time

DATETIME

创建时间

9

update_by

BIGINT(19)

更新者

10

update_time

DATETIME

更新时间

11

remark

VARCHAR(500)

备注

9.角色和菜单关联表(sys_role_menu)

描述:角色和菜单关联表

表结构:

序号

字段名

数据类型

主键

非空

默认值

描述

1

role_id

BIGINT(19)

角色ID

2

menu_id

BIGINT(19)

菜单ID

10.用户表(sys_user)

描述:用户表

表结构:

序号

字段名

数据类型

主键

非空

默认值

描述

1

id

BIGINT(19)

主键

2

user_name

VARCHAR(64)

NULL

用户名

3

nick_name

VARCHAR(64)

NULL

昵称

4

password

VARCHAR(64)

NULL

密码

5

type

CHAR(1)

0

用户类型:0代表普通用户,1代表管理员

6

status

CHAR(1)

0

账号状态(0正常 1停用)

7

email

VARCHAR(64)

邮箱

8

phonenumber

VARCHAR(32)

手机号

9

sex

CHAR(1)

用户性别(0男,1女,2未知)

10

avatar

VARCHAR(128)

头像

11

create_by

BIGINT(19)

创建人的用户id

12

create_time

DATETIME

创建时间

13

update_by

BIGINT(19)

更新人

14

update_time

DATETIME

更新时间

15

del_flag

INT(10)

0

删除标志(0代表未删除,1代表已删除)

11.用户和角色关联表(sys_user_role)

描述:用户和角色关联表

表结构:

序号

字段名

数据类型

主键

非空

默认值

描述

1

user_id

BIGINT(19)

用户ID

2

role_id

BIGINT(19)

角色ID

四、功能设计与展示

 1、前台

首页进行文章的展示

注册功能 ,注册只是简单的注册,密码会进行MD5加密

 登录功能

 评论功能

2、后台

写文章

 用户管理,这里可以对用户进行增删改查,还可以进行授予一定权限

 

 角色管理,可以对角色进行增删改查,还可以更改角色对应的权限信息

 

菜单管理,对系统的菜单和一些按钮的增删改查,以及修改路由地址

 

 文章管理,对文章的增删改查

分类管理,对分类的增删改查

 友链管理,对友链的增删改查

 标签管理,对标签的增删 改查

 五、心得体会

通过本次项目我学到了很多东西,对规范的项目开发流程有了更加深入的了解,对SpringSecurity安全框架的认证和授权流程有了全新的认识。

 项目地址:GitHub - gjhj030108/GBlog


http://www.ppmy.cn/news/146638.html

相关文章

【04】数据结构与算法基础-类C语言有关操作补充 | 数组的静态、动态定义 | C、C++中内存分配 | C++中的参数传递方式-指针、数组、引用

目录 1.元素类型说明1.1顺序表类型定义1.2数组定义1.3C语言的内存动态分配1.4C的动态存储分配1.4.1创建内存1.4.2释放内存 1.5C中的参数传递1.5.1传值方式1.5.2传地址方式-指针变量1.5.3传地址方式-数组名1.5.4传地址方式-引用类型 1.元素类型说明 1.1顺序表类型定义 typedef…

激光打印机硒鼓HP1500/2500粉盒重生攻略

HP1500/2500粉盒重生攻略 仅以黑色粉盒为例

HP laserjet 1022n打印机总出现前端盖打开或者缺少硒鼓对话框,无法打印?

可能原因: 机器硒鼓没有放到位或者前盖子没合好,总之是传感器没有接收到感应发出的报警! 建议: ①重新开关盖子 ② 活动下硒鼓 ③换个硒鼓组件试下④看机盖旁有个白色的塑料条连接下面的齿轮离合器推动与鼓接触的那个齿轮是否掉了…

HP5000硒鼓完美加粉彩色图解

本文中的加粉方法适合HP 5000与CANON 850两种机型的硒鼓,特点:不破坏鼓体,无加粉痕迹 ,完美加粉。 ] 本新闻共分31页:[1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15][16] [17] [18] [19] [20] [2…

惠普打印机换硒鼓图解_hp硒鼓怎么安装 hp硒鼓安装方法这图文教程】

导语:打印机是我们办公的必需品,不得不说,它提高了我们的办公效率,是一种很重要的文具。在我们日常使用的时候,往往需要手工为打印机加上耗材。比如安装硒鼓就是其一,或许有一些小伙伴们对于安装硒鼓的过程…

php-2612硒鼓加墨_HP2612A硒鼓加粉图解

2010-10-26 15:34:55| 分类: 打印机类 | 字号 大 中 小 订阅 作为一款定位于个人和 SOHO 用户的黑白激光打印机, LaserJet 1020 有着简洁紧凑的机身设 计(体积:370242209mm) ,重量 5kg ,和通常的喷墨打印机一样&#x…

HP惠普M281打印机升级后不兼容国产硒鼓,系统固件降级步骤

HP惠普M281打印机升级后不兼容国产硒鼓,系统固件降级步骤 2022-04-10 11:05:11 14点赞 69收藏 39评论 一、前言 这台惠普M281打印机还是之前海淘购买的,虽然买的时间不短了,其实用的次数挺少的,一年打印不了几次。 以下是当时…

【Axure教程】大小图动态轮播

大小图动态轮播常用于展示多张图片,其中包含两种不同尺寸的图片。这种类型的轮播通常用于网站首页、产品展示、广告宣传等场景,提供更丰富的展示方式,吸引用户的注意力并提供更多信息。通过切换不同的图片,可以有效地传达多个内容…