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

news2024/11/28 8:27:05

 一、项目概述

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.coloradmin.cn/o/597873.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

地震勘探基础(一)之地震波

地震波 纵波/P波 (Compressional Wave) :质点的动方向与波的传播方向一致。天然地震时,纵波造成地面上下颠簸震动,纵波先达到地表。 纵波速度与弹性参数的关系:纵波速度与体积模量,杨氏模量,剪切模量&…

tcpdump 抓包工具详细图文教程(下)

目录 一、tcpdump 常用参数的使用 1.1 tcpdump -i # 指定监听网络接口 1.2 tcpdump -w # 将捕获到的信息保存到文件中,且不分析和打印在屏幕 1.3 tcpdump -r # 从文件中读取数据 1.4 tcpdump -n # 不把 ip 转化成域名 1.5 tcpdump -t # 在每行的输出中不…

springboot自定义注解的使用++日志

1.添加切面依赖 <dependency><groupId>org.aspectj</groupId><artifactId>aspectjweaver</artifactId><version>1.8.9</version> </dependency> 2.自定义注解 Target(ElementType.METHOD) Retention(RetentionPolicy.RUNTI…

Java语言---PriorityQueue与堆

目录 一.堆 1.1堆的概念 1.2堆的存储方式 1.3堆的操作 1.3.1堆的创建 1.3.2代码的实现&#xff1a; 堆的插入元素 堆的删除 二、PriorityQueue 2.1概念 2.2性质 2.3PriorityQueue的创建构造 2.4PriorityQueue的操作方法 总结 &#x1f63d;个人主页&#xff1a;t…

堆的应用:Top-K问题

朋友们、伙计们&#xff0c;我们又见面了&#xff0c;本期来给大家解读一下堆的应用--Top-K问题的相关知识点&#xff0c;如果看完之后对你有一定的启发&#xff0c;那么请留下你的三连&#xff0c;祝大家心想事成&#xff01; 数据结构与算法专栏&#xff1a;数据结构与算法 个…

基于Web智慧油库三维可视化管理系统

油库是协调原油生产、原油加工、成品油供应及运输的纽带&#xff0c;是国家石油储备和供应的基地&#xff0c;它对于保障国防和促进国民经济高速发展具有相当重要的意义。 建设背景 石油作为重要的战略资源&#xff0c;关系着国家安全和人民生活。油库是石油能源供应链中的关…

俞浩“死磕”抖音,追觅科技618面临三变数

​文 | 智能相对论 作者 | 渡过 智能清洁“新秀”追觅科技来势汹汹。 创始人俞浩曾向媒体表示&#xff0c;“追觅科技……2023年做到行业技术第一&#xff0c;2024年做到行业市占率第一&#xff0c;2025年做到行业利润第一。” 具体到市场上&#xff0c;能拱火热度的电商节…

linux实践php8.2加laravel-cotane和roadrunner服务器

php8.2 composer -v 报错&#xff1a; Deprecation Notice: strlen(): Passing null to parameter #1 ($string) of type string is deprecated in phar:///usr/bin/composer/vendor/symfony/console/Descriptor/TextDescriptor.php:290 解决方法可以升级下composer&#xff1…

像写 Rust 一样写 Python!

几年前&#xff0c;开始使用Rust编程&#xff0c;它逐渐改变了我使用其他编程语言&#xff08;尤其是Python&#xff09;设计程序的方式。在我开始使用Rust之前&#xff0c;我通常以一种非常动态和类型松散的方式编写Python代码&#xff0c;没有类型提示&#xff0c;到处传递和…

2023年江西省大学生程序设计竞赛vp赛后补题

Problem - B - Codeforces 思路&#xff1a; 显然难以讨论<的情况&#xff0c;正难则反&#xff0c;我们尝试计算>的情况以为每次a&#xff0c;他的实际贡献给b的是a%m&#xff0c;x也一样&#xff0c;所以他们先取mod我们能够大于成立&#xff0c;要求a[i]sum>mod,…

常用的表格检测识别方法——表格结构识别方法 (下)

常用的表格检测识别方法——表格结构识别方法&#xff08;下&#xff09; 3.2表格结构识别方法 表格结构识别是表格区域检测之后的任务&#xff0c;其目标是识别出表格的布局结构、层次结构等&#xff0c;将表格视觉信息转换成可重建表格的结构描述信息。这些表格结构描述信息…

深度剖析数据在内存中的存储(超详细版)

&#x1f495;"痛苦难以避免&#xff0c;而磨难可以选择。"-->村上春树&#x1f495; 作者&#xff1a;Mylvzi ​​​​​​​ 文章主要内容&#xff1a;数据在内存中的存储 目录 前言&#xff1a;数据在计算机中的存储 正文&#xff1a; 1.详解数据类型 2.整…

2023-05-31 Git将已存在的项目上传到仓库

背景 正常情况下我们是在GitHub(Gitee是一样的&#xff0c;还不卡&#xff0c;因此下文将在Gitee仓库操作)创建一个代码仓库&#xff0c;然后将仓库拉到本地&#xff0c;在本地会生成一个和仓库名称一样的文件夹&#xff0c;然后在文件夹内写代码&#xff0c;最后使用git命令将…

9 概率图模型【手写笔记】

文章目录 9 概率图模型【手写笔记】9.1 背景介绍9.2 贝叶斯网络&#xff08;Bayesian Network&#xff09;——有向图网络9.3 马尔可夫网络&#xff08;Markov Network&#xff09;——无向图网络9.4 Inferce&#xff08;推断&#xff09;——求解后验9.5 更多的图的概念 9 概率…

2023年DAMA-CDGA/CDGP数据治理认证考试形式、含金量

DAMA认证为数据管理专业人士提供职业目标晋升规划&#xff0c;彰显了职业发展里程碑及发展阶梯定义&#xff0c;帮助数据管理从业人士获得企业数字化转型战略下的必备职业能力&#xff0c;促进开展工作实践应用及实际问题解决&#xff0c;形成企业所需的新数字经济下的核心职业…

表的约束.

目录 表的约束空属性默认值列描述zerofill主键自增长唯一键外键综合案例 表的约束 真正约束字段的是数据类型&#xff0c;但是数据类型约束很单一&#xff0c;需要有一些额外的约束&#xff0c;更好的保证数据的合法性&#xff0c;从业务逻辑角度保证数据的正确性。比如有一个…

一文带你了解MySQL之undo日志

目录 一、事务回滚的需求二、事务id2.1 给事务分配id的时机2.2 事务id是怎么生成的2.3 trx_id隐藏列 三、undo日志的格式3.1 INSERT操作对应的undo日志3.2 DELETE操作对应的undo日志3.3 UPDATE操作对应的undo日志3.3.1 不更新主键的情况3.3.2 更新主键的情况 四、通用链表结构五…

法国ESC高等商学院DBA申请

申请法国ESC高等商学院DBA&#xff0c;你需要了解这些&#xff01;什么是法国ESC高等商学院DBA&#xff1f;法国ESC高等商学院DBA是法国商学院中的顶尖学位&#xff0c;也是全球最优秀的商学博士学位之一。该学位旨在为商业领袖、企业家和高级管理人员提供高水平的商业教育和研…

优秀的工具=生产力!15款高效原型设计软件种草

一个优秀产品的诞生&#xff0c;必定离不开原型设计。产品原型是概念到现实的桥梁&#xff0c;是产品成功的关键&#xff01; 为什么产品原型如此重要&#xff1f;产品原型可以帮助团队更高效地测试产品可行性、理解和评估用户需求并不断优化迭代产品的最终方案。它决定了最终…

windows10系统mysql官方绿色版安装

1.下载 1&#xff09;下载页面&#xff1a;MySQL :: Download MySQL Community Server 2&#xff09;点击 Download 按钮下载zip包到本地&#xff0c;解压&#xff08;我的本地解压到了D:\Programs\mysql-8.0.33-winx64&#xff09; 2.环境配置 1&#xff09;环境变量配置&a…