💖💖作者:计算机毕业设计江挽 💙💙个人简介:曾长期从事计算机专业培训教学,本人也热爱上课教学,语言擅长Java、微信小程序、Python、Golang、安卓Android等,开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。平常喜欢分享一些自己开发中遇到的问题的解决办法,也喜欢交流技术,大家有技术代码这一块的问题可以问我! 💛💛想说的话:感谢大家的关注与支持! 💜💜 网站实战项目 安卓/小程序实战项目 大数据实战项目 深度学习实战项目 @TOC
博客系统介绍
本博客系统是一个基于SpringBoot框架开发的现代化内容管理平台,采用前后端分离的架构设计,前端运用Vue.js配合ElementUI组件库构建用户友好的交互界面,后端通过SpringBoot整合Spring、SpringMVC和MyBatis等成熟技术栈,实现稳定可靠的业务逻辑处理。系统以MySQL作为数据存储引擎,支持用户注册登录、个人信息管理、文章发布编辑、分类标签管理、内容举报处理、消息通知推送等核心功能模块。整个系统遵循B/S架构模式,用户可通过浏览器直接访问使用,无需安装额外客户端软件。系统界面简洁美观,操作流程清晰直观,既能满足普通用户的内容创作需求,也为管理员提供了完善的后台管理工具。通过合理的权限控制和数据验证机制,系统能够有效保障用户数据安全和内容质量,为用户打造一个安全、便捷、功能丰富的博客创作环境。
博客系统演示视频
博客系统演示图片
博客系统代码展示
import org.apache.spark.sql.SparkSession;
import org.springframework.web.bind.annotation.*;
import org.springframework.beans.factory.annotation.Autowired;
import com.example.mapper.UserMapper;
import com.example.mapper.ArticleMapper;
import com.example.mapper.CategoryMapper;
import com.example.entity.User;
import com.example.entity.Article;
import com.example.entity.Category;
import java.util.List;
import java.util.Date;
@RestController
@RequestMapping("/api")
public class BlogController {
@Autowired
private UserMapper userMapper;
@Autowired
private ArticleMapper articleMapper;
@Autowired
private CategoryMapper categoryMapper;
private SparkSession spark = SparkSession.builder().appName("BlogSystem").master("local[*]").getOrCreate();
@PostMapping("/user/register")
public Result registerUser(@RequestBody User user) {
if (user.getUsername() == null || user.getUsername().trim().isEmpty()) {
return Result.error("用户名不能为空");
}
if (user.getPassword() == null || user.getPassword().length() < 6) {
return Result.error("密码长度不能少于6位");
}
User existUser = userMapper.findByUsername(user.getUsername());
if (existUser != null) {
return Result.error("用户名已存在");
}
user.setCreateTime(new Date());
user.setStatus(1);
user.setRole("user");
String encodedPassword = BCrypt.hashpw(user.getPassword(), BCrypt.gensalt());
user.setPassword(encodedPassword);
int result = userMapper.insertUser(user);
if (result > 0) {
return Result.success("注册成功");
} else {
return Result.error("注册失败");
}
}
@PostMapping("/user/login")
public Result loginUser(@RequestBody User loginUser) {
if (loginUser.getUsername() == null || loginUser.getUsername().trim().isEmpty()) {
return Result.error("用户名不能为空");
}
if (loginUser.getPassword() == null || loginUser.getPassword().trim().isEmpty()) {
return Result.error("密码不能为空");
}
User user = userMapper.findByUsername(loginUser.getUsername());
if (user == null) {
return Result.error("用户不存在");
}
if (user.getStatus() == 0) {
return Result.error("账户已被禁用");
}
boolean passwordMatch = BCrypt.checkpw(loginUser.getPassword(), user.getPassword());
if (!passwordMatch) {
return Result.error("密码错误");
}
String token = JwtUtil.generateToken(user.getId(), user.getUsername());
user.setLastLoginTime(new Date());
userMapper.updateLastLoginTime(user.getId(), new Date());
return Result.success("登录成功", token);
}
@PostMapping("/article/create")
public Result createArticle(@RequestBody Article article, HttpServletRequest request) {
String token = request.getHeader("Authorization");
if (token == null || token.isEmpty()) {
return Result.error("未登录");
}
Integer userId = JwtUtil.getUserIdFromToken(token);
if (userId == null) {
return Result.error("token无效");
}
if (article.getTitle() == null || article.getTitle().trim().isEmpty()) {
return Result.error("文章标题不能为空");
}
if (article.getContent() == null || article.getContent().trim().isEmpty()) {
return Result.error("文章内容不能为空");
}
if (article.getCategoryId() == null) {
return Result.error("请选择文章分类");
}
Category category = categoryMapper.findById(article.getCategoryId());
if (category == null) {
return Result.error("分类不存在");
}
article.setAuthorId(userId);
article.setCreateTime(new Date());
article.setUpdateTime(new Date());
article.setStatus(1);
article.setViewCount(0);
article.setLikeCount(0);
int result = articleMapper.insertArticle(article);
if (result > 0) {
categoryMapper.updateArticleCount(article.getCategoryId());
return Result.success("文章发布成功");
} else {
return Result.error("文章发布失败");
}
}
@GetMapping("/article/list")
public Result getArticleList(@RequestParam(defaultValue = "1") int page,
@RequestParam(defaultValue = "10") int size,
@RequestParam(required = false) Integer categoryId,
@RequestParam(required = false) String keyword) {
int offset = (page - 1) * size;
List<Article> articles;
int total;
if (categoryId != null && keyword != null && !keyword.trim().isEmpty()) {
articles = articleMapper.findByCategoryAndKeyword(categoryId, keyword, offset, size);
total = articleMapper.countByCategoryAndKeyword(categoryId, keyword);
} else if (categoryId != null) {
articles = articleMapper.findByCategory(categoryId, offset, size);
total = articleMapper.countByCategory(categoryId);
} else if (keyword != null && !keyword.trim().isEmpty()) {
articles = articleMapper.findByKeyword(keyword, offset, size);
total = articleMapper.countByKeyword(keyword);
} else {
articles = articleMapper.findAllPublished(offset, size);
total = articleMapper.countAllPublished();
}
for (Article article : articles) {
User author = userMapper.findById(article.getAuthorId());
if (author != null) {
article.setAuthorName(author.getUsername());
}
Category category = categoryMapper.findById(article.getCategoryId());
if (category != null) {
article.setCategoryName(category.getName());
}
}
return Result.success("获取成功", articles, total);
}
@PostMapping("/category/create")
public Result createCategory(@RequestBody Category category, HttpServletRequest request) {
String token = request.getHeader("Authorization");
if (token == null || token.isEmpty()) {
return Result.error("未登录");
}
Integer userId = JwtUtil.getUserIdFromToken(token);
if (userId == null) {
return Result.error("token无效");
}
User user = userMapper.findById(userId);
if (user == null || !"admin".equals(user.getRole())) {
return Result.error("无权限操作");
}
if (category.getName() == null || category.getName().trim().isEmpty()) {
return Result.error("分类名称不能为空");
}
Category existCategory = categoryMapper.findByName(category.getName().trim());
if (existCategory != null) {
return Result.error("分类名称已存在");
}
category.setName(category.getName().trim());
category.setCreateTime(new Date());
category.setArticleCount(0);
category.setStatus(1);
int result = categoryMapper.insertCategory(category);
if (result > 0) {
return Result.success("分类创建成功");
} else {
return Result.error("分类创建失败");
}
}
@GetMapping("/category/list")
public Result getCategoryList() {
List<Category> categories = categoryMapper.findAllActive();
for (Category category : categories) {
int articleCount = articleMapper.countByCategory(category.getId());
category.setArticleCount(articleCount);
}
return Result.success("获取成功", categories);
}
}
博客系统文档展示
💖💖作者:计算机毕业设计江挽 💙💙个人简介:曾长期从事计算机专业培训教学,本人也热爱上课教学,语言擅长Java、微信小程序、Python、Golang、安卓Android等,开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。平常喜欢分享一些自己开发中遇到的问题的解决办法,也喜欢交流技术,大家有技术代码这一块的问题可以问我! 💛💛想说的话:感谢大家的关注与支持! 💜💜 网站实战项目 安卓/小程序实战项目 大数据实战项目 深度学习实战项目