Springboot项目——博客平台

news2024/11/16 13:26:55

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

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

一、数据库设计

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

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

相关文章

干货|图生代码实例整理,让你的代码更高效

前言 “图生代码”。这项新功能允许开发人员直接利用产品设计图一键生成相应的代码,极大地提高了编程效率和研发速度。甚至会未来软件开发可能迎来一场革命性的变革。但图生代码究竟能直到什么程度?本文结合一款图生代码的实例程序整理了一些有代表意义…

如何在 DigitalOcean Droplet 云主机上创建 Ubuntu 服务器

在本文中,你将通过 DigitalOcean 的管理面板创建一个 Ubuntu 服务器,并将其配置为使用你的 SSH 密钥。设置好服务器后,你可以在其上部署应用程序和网站。 本教程是DigitalOcean云课程简介的一部分,它指导用户完成将应用程序安全地…

期望薪资30k字节java2面,A给B转账的同时B给A转账怎么并发量最高

一面 1、自我介绍 2、详细介绍一下自己的做的项目?根据项目提了一些问题 3、hashmap原理 4、B树原理? 5、final禁止重排序原理? 6、设计一个榨汁机类,面向对象怎么设计? 7、get、post区别,使用场景&…

mysql实战——mysql5.7保姆级安装教程

1、上传 上传5.7压缩包到/usr/local目录下 2、解压 cd /usr/local tar -zxvf mysql--5.7.38-linux-glibc2.12-x86_64.tar.gz mv mysql-5.7.38-linux-glibc2.12-x86_64/ mysql 3、创建mysql用户组和用户 groupadd mysql useradd -g mysql mysql 4、创建数据目录data&#xf…

OneForall工具的下载安装和使用(Windows和Linux)

目录 OneForall的介绍 OneForall的下载 OneForall的安装 安装要求 安装步骤(git 版) 安装(kali) OneForall的使用命令 在Windows 在Linux(kali) OneForall的结果说明 免责声明 本文所提供的文字和…

基于Java的高校学生勤工助学优派系统的设计与实现(论文+源码)_kaic

摘 要 高校勤工助学管理系统的出现,让学生的工作更加标准,不仅仅使高校办公室的办公水平以及管理水平大大提高,还优化了勤工助学资金的使用方式方法,完善了资助所需费用的资源配置,可以卓有成效地缩减学校的管理经费。本系统主…

智能SQL代码生成器,开发者的得力助手

🏡 博客首页:IT 派同学 ⛳️ 欢迎关注 🐳 点赞 🎒 收藏 ✏️ 留言 🎢 本文由 IT 派同学原创编撰 🚧 系列专栏:《开源专栏》 🎈 本系列主要输出作者自创的开源项目 🔗 作品…

B端产品C端化设计,趋势不可挡呀。

一、B端产品和C端产品设计的不同 在设计上,B端(Business-to-Business)和C端(Consumer)之间存在一些区别。 用户群体:B端产品的用户是企业或组织,而C端产品的用户是普通消费者。B端产品的用户通…

面向对象编程的魅力与实战:以坦克飞机大战为例

新书上架~👇全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我👆,收藏下次不迷路┗|`O′|┛ 嗷~~ 目录 一、面向对象编程的引言 二、理解面向对象编程与面向过程编程的差异 三、创建类与对象&…

基于 React + Nest 全栈开发的后台系统

Xmw Admin 基于 React Nest 全栈开发的后台系统 🪴 项目简介 🎯 前端技术栈: React、Ant Design、Umi、TypeScript🎯 后端技术栈: Nest.js、Sequelize、Redis、Mysql😝 线上预览: https://r…

Java入门基础学习笔记48——ArrayList的应用案例

掌握从容器中找出某些数据并成功删除的技巧: 需求: 现在加入购物车中存储了如下这些商品:Java入门,宁夏枸杞,黑枸杞,人字拖,特级枸杞,枸杞子。现在用户不想买枸杞了,选…

JVM之【运行时数据区2】

三、堆(Heap) 1、什么是堆 在Java虚拟机(JVM)中,堆(Heap)是用于动态分配内存的区域。在Java程序运行时,所有对象和数组都是在堆中分配内存的。堆是Java内存模型的重要组成部分&…

常见SSL证书品牌关系图

常见SSL证书品牌关系图 在SSL证书市场上,有几个主要的品牌和他们之间的复杂关系。以下是一些主要的SSL证书提供商及其关系的简要概述: DigiCert: DigiCert 是最大的SSL证书颁发机构之一。它收购了Symantec的SSL和PKI业务,其中包括…

Linux系统硬盘分区

文章目录 一、硬盘和分区1.1 硬盘的概念1.2 硬盘分区的类别1.3 硬盘分区的方式1.3.1 MBR分区1.3.2 GPT分区 1.4 硬盘分区的意义1.4.1 分区的作用1.4.2 分区的缺点 二、如何建立分区2.1 分区命令2.1.1 fdisk命令2.1.2 gdisk命令 2.2 建立分区2.2.1 建立MBR分区建立主分区建立扩展…

leetCode.82. 删除排序链表中的重复元素 II

leetCode.82. 删除排序链表中的重复元素 II 题目思路: 代码 class Solution { public:ListNode* deleteDuplicates(ListNode* head) {auto dummy new ListNode(-1);dummy->next head;auto p dummy;while(p->next){auto q p->next->next;while(q …

洛谷 P1346电车

题目来源于:洛谷 解题思路: 可以把一个路口看作一张图中的一个点,轨道是图中的边(注意:这是有向图),每一条边的权值就是这个边所联通的点是否需要按按钮(需要按按钮就是1&#xff0…

Ubuntu24.04安装tabby-terminal-1.0.207并处理依赖

1 下载 tabby-terminal-1.0.207 地址: https://github.com/Eugeny/tabby/releases 点击show all 36 assets 选择 tabby-1.0.207-linux-x64.deb 并下载。 2 依赖下载 gconf2_3.2.6-3ubuntu6_amd64.deb gconf2-common_3.2.6-3ubuntu6_all.deb gconf-service_3.2.6-…

如何实现倾斜摄影三维模型OSGB格式轻量化

如何实现倾斜摄影三维模型OSGB格式轻量化 倾斜摄影三维模型以其高精度和真实感受在城市规划、建筑设计和虚拟漫游等领域发挥着重要作用。然而,由于其庞大的数据量和复杂的几何结构,给数据存储、传输和可视化带来了挑战。为了解决这个问题,倾斜…

机器学习实验----逻辑回归实现二分类

目录 一、介绍 二、sigmoid函数 (1)公式: (2)sigmoid函数的输入 预测函数: 以下是sigmoid函数代码: 三、梯度上升 (1)似然函数 公式: 概念&#xff…

Android存储系统成长记

用心坚持输出易读、有趣、有深度、高质量、体系化的技术文章 本文概要 您一定使用过Context的getFileStreamPath方法或者Environment的getExternalStoragePublicDirectory方法,甚至还有别的方法把数据存储到文件中,这些都是存储系统提供的服务&#x…