Springboot项目——博客平台

前言:为巩固之前学习的知识,同时锻炼自己的代码能力,项目经验,熟悉前后端交互方式等,特此完成一个博客平台系统。(总之,为了学习,为了进步)

博客平台:本项目实现了一个简单的博客系统,其主要功能包括用户登录,用户注册,用户修改头像,发布博客,查看博客详情,编辑博客,发布博客等功能,有助于用户学习和记录知识等。该项目大致分为两个模块:用户模块,博客模块,下面主要从这两个模块开始介绍本项目。

一、数据库设计

1. 创建数据库 java_blog_spring

2. 创建两张表 user 表和 blog 表;

其中 user 表中的字段及其含义为

{

id int(11)(用户id,主键 自增);user_name varchar(128)(用户名,unique,not null);password varchar(128)(用户密码,not null);github_url varchar(128)(用户github地址);deleteFlag tinyint(4)(删除字段,1表示已删除,0表示未删除);create_time datetime(表示创建时间);update_time datetime(表示更新时间);photo varchar(256)(用户头像地址)

}

blog表中的字段及其含义为

{

id int(11)(用户id,主键 自增);title varchar(200)(博客标题);content text(博客正文);user_id int(11)(博客作者 id);deleteFlag tinyint(4)(删除字段,1表示已删除,0表示未删除);create_time datetime(表示创建时间);update_time datetime(表示更新时间);

}

二、全局处理

1. 统一数据格式返回

方便前后端交互,方便前端对后端的响应进行处理。

1)自定义结果实体类Result,其属性包括 code(业务码),errMsg(错误信息),data(接口响应的数据,泛型);其静态方法有 success(T data),在请求成功时可调用,参数data,表示给前端返回的数据内容;fail(String errMsg),在请求非法时可调用,参数 errMsg,表示非法请求的错误信息。其中,Result 类中的属性 code 通过自定义枚举类来实现,保证 code 值的正确性。        

2)自定义响应通知类,实现 ResponseBodyAdvice 接口,并重写其 supports 方法和 beforeBodyWrite方法,supports方法:判断是否要执行beforeBodyWrite方法,true为执行,false不执行;beforeBodyWrite方法:对response方法进行的具体操作处理,如果返回的结果已经时Result类时,需直接返回,另外,如果返回的结果时String类型,需通过ObjectMapper进行特殊处理。

2. 拦截器

1)自定义登录拦截器实现 HandlerInterceptor 接口,并重写 preHandle方法,表示是否应该对请求进行拦截

2)自定义配置类实现 WebMvcConfigurer 接口,并重写 addInterceptors 方法,表示拦截哪些请求重写 addResourceHandlers,指向静态资源的路径,(例如上传图片时会用到)。

3. 全局异常处理

自定义异常处理类,实现处理全局异常的方法,并添加 @ExceptionHandler 注解,使得在发生相应异常时,自动调用该方法来进行处理。

三、用户模块

用户模块的实现在 UserController 类中

1. 登录功能

1)前端页面

2) 后端实现

使用 JWT 令牌(Json Web Token)存储用户登录信息;后端首先校验用户信息的合法性,当校验成功时,为该用户生成令牌,将用户的 id 存储在 token 中(方便后续获取用户信息),并设置过期时间,客户端将令牌存储在 Local Storage 中;后续客户端的请求都会带着令牌,服务器会校验令牌,来决定是否拦截用户的请求。

2. 注册功能

1)前端页面

2)后端实现

使用 MD5 算法加密、UUID 加盐共同加密用户的密码,保证用户密码的安全性。服务器首先判断用户注册信息的合法性,用户名不能重复,两次密码需输入一致等;判断合法后,将用户的密码和UUID 生成的随机盐值,使用 MD5 算法进行加密后,存储在数据库中。

3. 获取当前登录用户信息(接口)

服务器根据用户的请求中的 token 是否存在判断用户登录状态,并根据 token 获取到存储在 token中的 登录用户 id,根据 id 从数据库中获取用户信息,并返回给前端。

4. 获取博客作者信息(接口)

服务器首先根据博客 id 在数据库中查询该博客对应的作者 id(在博客模块中实现),在判断作者 id 合法后,在数据库中,根据作者 id 获取作者信息并返回给前端。

5. 上传用户头像

1)前端页面(非常丑,还是不要看了,以实现功能为主(bushi)),通过 form 表单来实现图片的上传。

2)后端实现 

使用 Spring 框架下的 MultipartFile 类实现,设置图片的存储地址 filePath ,如果没有则创建一个,通过getContentType 方法获取图片类型和图片后缀名,通过 UUID 生成随机图片名拼接图片后缀名作为新的图片名 filename,通过 transferTo 方法将图片传输到 filePath/filename 下,即保存图片到指定目录,并通过 token 获取到用户 id,通过 id 将 filename 存储在数据库中,并返回成功与否的响应给前端。

四、博客模块

博客模块的实现在 BlogController 类中

1. 获取博客列表

1)前端页面

2)后端实现

 服务器直接从数据库中查询所有博客信息,并返回给前端,前端将每个博客信息拼接为相应的html 片段,并显示在页面上。

2. 查看博客详情

1)前端页面

2)后端实现

 后端根据前端传来的博客 id(通过 location.search 获取url中的参数),获取博客详情对象,然后拿到博客作者的 id,再通过 token 获取当前登录用户id,判断 id 是否一致,若一致,则说明当前用户是当前博客的作者,即当前用户具有对当前博客的编辑和删除权限,通过设置 该对象中的属性 isAuthor 为 true,来提供响应的编辑和删除的接口,最后返回该对象给前端。

3. 发布博客

1)前端页面

 2)后端实现

后端接收一个 blogInfo 对象,并判断该对象的合法性(某个属性为空等),然后通过 token 获取到当前登录用户的 id,并设置为该对象的作者 id,然后将该对象插入到数据库中,将插入的结果返回给前端。

4. 修改博客

1)前端页面

2)后端实现

首先需要前端将原博客信息显示到页面上,通过查看博客详情接口;然后后端对前端请求中传递的 blogInfo 对象进行合法性校验,此时就不需要再设置博客的作者 id 了,因为只能是博客作者编辑博客,直接更新数据库中对应的博客信息,并将结果返回给前端。

5. 删除博客

采用逻辑删除,服务器创建一个 blogInfo对象,并将前端传来的博客 id 设置为该对象的博客 id,再将 deleteFlag属性设置为 1,表示已删除, 最后将删除的结果返回给前端。

五、项目源码

java_R: 学习java之路 - Gitee.comicon-default.png?t=N7T8https://gitee.com/rcnhtin/java_-r/tree/master/project/blog_spring

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/17266.shtml

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

相关文章

网络安全的重要组成部分:数据库审计

数据库审计(简称DBAudit)以安全事件为中心,以全面审计和精确审计为基础,实时记录网络上的数据库活动,对数据库操作进行细粒度审计的合规性管理,对数据库遭受到的风险行为进行实时告警。它通过对用户访问数据…

线性稳压电路和开关稳压电路

稳压二极管稳压电路 电网电压增大,导到u1端的电压增大,从而使输出电压,稳压二极管两端的电压增大,稳压二极管两端电压增大,使流过的电注增大。那么,流过线性电阻R的总电流增大。 Ur电压增大,从…

PGP软件安装文件加密解密签名实践记录

文章目录 环境说明PGP软件安装PGP软件汉化AB电脑新建密钥并互换密钥对称密钥并互换密钥 文件加密和解密A电脑加密B电脑解密 文件签名A电脑签名文件B电脑校验文件修改文件内容校验失败修改文件名称正常校验 环境说明 使用VM虚拟两个win11,进行操作演示 PGP软件安装 PGP软件下…

AI赋能:人工智能技术驱动下的品牌海外市场精准分析与营销策略

随着全球化的加速和科技的飞速发展,品牌在海外市场的竞争愈发激烈。为了在竞争激烈的国际市场中脱颖而出,品牌需要更深入地了解海外消费者的行为、趋势和偏好。在这个过程中,人工智能(AI)技术以其强大的数据处理和分析…

【高阶数据结构(七)】B+树, 索引原理讲解

💓博主CSDN主页:杭电码农-NEO💓   ⏩专栏分类:高阶数据结构专栏⏪   🚚代码仓库:NEO的学习日记🚚   🌹关注我🫵带你学习更多数据结构   🔝🔝 高阶数据结构 1. 前言2. B树讲解…

音视频开发9 FFmpeg 解复用框架说明,重要API说明

一,播放器框架 二 常用音视频术语 容器/文件(Conainer/File): 即特定格式的多媒体文件, 比如mp4、flv、mkv等。 媒体流(Stream): 表示时间轴上的一段连续数据&#xff0…

HAL工程应该这样搭建~

目录 一、为何要自己手动搭建一个软件工程? 二、在Keil5STM32F429**平台下的软件工程搭建 三、打开Keil MDK5软件创建一个新工程 四、在各个文件夹下添加所需文件 五、在MDK工程下添加文件 六、在MDK下添加路路径 一、为何要自己手动搭建一个软件工程&#xff…

安泰电子:电压放大器有哪些特点

电压放大器是电子电路中常见的一种重要元件,其作用是将输入电压信号放大到更高的电压水平。它在各种应用中都扮演着关键的角色,从音频放大器到通信系统中的射频放大器都有广泛的应用。下面安泰电子将介绍电压放大器的特点,以便更好地理解它们…

python 办公自动化-生成ppt文本和图

最终样式 代码实现 # 可编辑折线+写入文字 成功 # 问题: 设置字体类型和加粗和字体为微软雅黑,是只改了字母和数字的字体,中文没变化 pip install pptx_ea_font 这个库可以解决这个问题 import pandas as pd import pptx_ea_font import matplotlib.pyplot as plt from pp…

嵌入式智能硬件茶杯垫的设计与实现方案

iCupBox简介 这是一款智能杯垫产品,基于GTD时间管理理念设计,目的是提醒人们专心工作和及时喝水休息,提高工作效率。 https://gitee.com/jiangtao008/iCupBox 开原许可协议:MIT 项目分为客户端APP和杯垫固件系统: 客户端APP,使用QML开发,集成GTD时间管理方法,与杯垫固…

让AI学相机对焦: Learning to AutoFocus

前言 分析来自谷歌发表在 CVPR 2020 上的论文 Learning to Autofocus :https://arxiv.org/pdf/2004.12260 目前网上对这篇论文的分析较少,有的分析并没有指出关键点,如:论文解读: Learning to AutoFocus-CSDN博客&am…

pytorch-16 复现经典网络:LeNet5与AlexNet

一、相关概念 对于(10,3,227,227)数据表示,10张3通道的图,图的大小(特征数)为227*227. 通道数:作为卷积的输入通道数和输出通道数。 特征数:特征图的大小 步长stride和填充padding&…

三相电子负载:行业前沿

三相电子负载是模拟电网中实际负载的装置,主要用于电源、电机、变压器等产品的测试和老化。随着科技的发展,三相电子负载在电力、通信、汽车电子、新能源等领域的应用越来越广泛,成为行业前沿技术之一。 三相电子负载在电源行业的应用非常广泛…

聚会活跃气氛神器小程序源码系统 各种小游戏 让聚会不再冷场 带源代码包以及安装搭建教程

系统概述 在社交聚会中,如何让气氛活跃起来一直是一个让人关注的问题。小编给大家分享一款聚会活跃气氛神器小程序源码系统。它不仅提供了丰富多样的小游戏,还带有源代码包和详细的安装搭建教程,让你轻松打造属于自己的聚会互动平台。 代码…

Qt 项目(CMake)支持多国语言(2024/05)

目录 1.在工程手动创建languages文件夹2.修改CMakeLists.txt3.在qml上随便添加一下文字内容4.执行CMake 参考:Qt 项目(CMake)设置国际化支持 1.在工程手动创建languages文件夹 2.修改CMakeLists.txt set(TS_FILES"${CMAKE_SOURCE_DIR}/languages/aidi_zh_CN.ts"&qu…

超声波清洗机哪家好一点?四款无比卓越精品不可错过

在日常生活中,眼镜成为了我们不可或缺的伙伴,无论是阅读书籍、工作还是享受自然风光,清晰的视野总是至关重要。然而,眼镜上不可避免地会沾染灰尘、油脂甚至细菌,影响我们的视觉体验。传统的眼镜清洗方法虽然简单&#…

Python使用MQTT连接新版ONENet

Python MQTT 连接新版ONENet 简介 前几个教程我们使用mqtt.fx连接了新版的ONENet, 只是跑通了MQTT协议,但是在实际操作下还需要实现具体环境、具体设备的MQTT连接,本章教程将以Python MQTT的方式连接 ONENet 参考文档: paho-mqtt PyPI …

数据结构 顺序表

目录 1. 什么是数据结构?2. 顺序表2.1 线性表2.2 顺序表 3. 动态顺序表的实现 正文开始 1. 什么是数据结构? 在学习顺序表前,我们先来了解一下什么是数据结构:数据结构是计算机存储、组织数据的方式,具有一定逻辑关系…

用了那么久的可道云teamOS,居然才发现这个隐藏的功能:一键存图,无需下载

在日常的工作或学习中,我们在遇到喜欢的图片时,总会想要保存下来以备后用。 然而,传统的图片保存方式通常需要我们右键另存为,或者复制链接、打开下载工具,甚至可能需要跳转到其他应用或网页才能完成下载。 存在电脑本…

数据整理的Compact流程 (二)|OceanBase数据转储合并技术解读(二)

上篇文章《数据整理的Compact流程 (一)|OceanBase数据转储合并技术解读(二)》中,有讲解到,在OceanBase数据库中,当MemTable写满时,将其下刷到Mini SSTable的过程包含两个…