# blogCourseDesign **Repository Path**: course-project-training/blog-course-design ## Basic Information - **Project Name**: blogCourseDesign - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-10-09 - **Last Updated**: 2026-10-09 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Blog - 个人博客系统 一个功能完整的个人博客系统,支持文章发布与管理、用户认证、评论互动、分类标签、以及基于大模型的 AI 智能助手。 --- ## 功能架构 ### 用户认证 支持用户注册与登录。注册时可填写管理员邀请码成为管理员。登录后系统签发 Token,后续操作凭 Token 鉴权,区分普通用户与管理员权限。 ### 文章管理 用户可以发布、编辑、删除自己的文章,管理员可管理所有文章。文章支持富文本内容,可关联一个分类和多个标签。首页和文章列表页支持按分类、标签、关键词筛选,分页浏览。 ### 评论互动 登录用户可在文章详情页发表评论,所有访客均可查看评论列表。评论按时间排序,分页展示。 ### 点赞与收藏 登录用户可对文章进行点赞和收藏,再次点击取消。每篇文章独立统计点赞数和收藏数,用户可查看自己的点赞/收藏状态。 ### 分类管理 管理员可创建、编辑、删除文章分类。分类支持排序,用于文章列表的筛选导航。 ### 用户管理 普通用户可查看和编辑自己的个人资料。管理员可查看所有注册用户列表,并有权删除违规用户。 ### AI 智能助手 提供独立的对话页面,用户可与 AI 进行多轮对话。AI 定位为博客创作助手,可协助内容构思、文章润色、主题推荐等。支持多会话管理,可新建、切换、删除会话,对话历史自动保存。无需登录即可使用。 ## 项目架构 ``` Blog/ ├── blog-server/ ← 后端项目 (Spring Boot) │ └── src/main/java/com/blog/ │ ├── BlogApplication.java 启动类 │ │ │ ├── config/ 配置层 │ │ ├── WebConfig.java CORS 跨域配置,放行 GET 请求及 auth/chat 路由 │ │ ├── MyBatisPlusConfig.java MyBatis-Plus 分页插件、自动填充配置 │ │ ├── ChatConfig.java Spring AI 聊天客户端配置(系统 Prompt、Advisor 链) │ │ └── GlobalExceptionHandler.java 全局异常捕获,统一返回 Result 格式 │ │ │ ├── controller/ 控制器层 — 接收 HTTP 请求,参数校验,调用 Service │ │ ├── AuthController.java 注册 / 登录 │ │ ├── ArticleController.java 文章 CRUD、按分类/标签/关键词分页查询 │ │ ├── CommentController.java 评论发表与查询 │ │ ├── LikeController.java 点赞切换与状态查询 │ │ ├── FavoriteController.java 收藏切换与状态查询 │ │ ├── CategoryController.java 分类增删改查(管理员) │ │ ├── UserController.java 个人信息编辑 / 用户管理(管理员) │ │ └── ChatController.java AI 对话:发送消息、历史记录、会话管理 │ │ │ ├── service/ 服务层 — 业务逻辑封装 │ │ ├── AuthService.java 注册(BCrypt 加密)、登录(JWT 签发) │ │ ├── ArticleService.java 文章发布/编辑(权限校验)、多条件分页查询 │ │ ├── CommentService.java 评论发表与文章关联查询 │ │ ├── LikeService.java 点赞去重切换、计数统计 │ │ ├── FavoriteService.java 收藏去重切换、计数统计 │ │ ├── CategoryService.java 分类管理,含排序字段 │ │ ├── UserService.java 用户资料更新、管理员用户列表 │ │ └── ChatService.java Spring AI ChatClient 调用、对话记忆管理、 │ │ 会话 ID 生成与历史查询 │ │ │ ├── mapper/ 数据访问层 — MyBatis-Plus BaseMapper │ │ ├── UserMapper.java │ │ ├── ArticleMapper.java 自定义 SQL:多条件分页、标签关联查询 │ │ ├── CommentMapper.java │ │ ├── LikeMapper.java │ │ ├── FavoriteMapper.java │ │ ├── CategoryMapper.java │ │ └── TagMapper.java │ │ │ ├── entity/ 实体类 — 与数据库表一一映射 │ │ ├── User.java id, username, password, email, role, createdAt │ │ ├── Article.java id, title, content, userId, categoryId, createdAt, updatedAt │ │ ├── Comment.java id, content, articleId, userId, createdAt │ │ ├── Category.java id, name, sortOrder, createdAt │ │ ├── Tag.java id, name, createdAt │ │ ├── ArticleTag.java 文章-标签关联中间表 │ │ ├── ArticleLike.java 点赞记录 │ │ └── ArticleFavorite.java 收藏记录 │ │ │ ├── dto/ 数据传输对象 — 前后端交互的数据模型 │ │ ├── Result.java 统一响应体 { code, message, data } │ │ ├── LoginRequest.java 登录请求 { username, password } │ │ ├── RegisterRequest.java 注册请求 { username, password, email, adminKey } │ │ └── ChatRequest.java 聊天请求 { message, conversationId } │ │ │ ├── interceptor/ 拦截器层 │ │ └── JwtInterceptor.java JWT 鉴权拦截:从 Header 提取 Token 并验证, │ │ 将 userId 存入 ThreadLocal,放行 GET 与 auth/chat 路由 │ │ │ └── util/ 工具类 │ └── JwtUtil.java JWT 生成、解析、验证(HS256, 24h 有效期) │ └── blog-web/ ← 前端项目 (Vue 3 + Vite) └── src/ ├── api/ API 请求封装 — 基于 Axios 实例 │ ├── request.js Axios 实例 + 拦截器(自动携带 Token、统一错误提示) │ ├── auth.js 登录/注册接口 │ ├── article.js 文章 CRUD 接口 │ ├── comment.js 评论接口 │ ├── like.js 点赞接口 │ ├── favorite.js 收藏接口 │ ├── category.js 分类接口 │ ├── user.js 用户接口 │ └── chat.js AI 聊天接口(发送消息、会话管理) │ ├── components/ 公共组件 │ ├── AppHeader.vue 全局导航栏(Logo、菜单、用户头像下拉、AI 助手入口) │ └── AppFooter.vue 全局页脚(版权信息) │ ├── router/ 路由配置 │ └── index.js Vue Router 路由表 + 导航守卫(登录校验、管理员权限校验) │ ├── stores/ 状态管理 — Pinia │ └── auth.js 用户认证状态(token、userInfo、登录/登出/注册 action) │ ├── views/ 页面视图 │ ├── Home.vue 首页(Hero 横幅 + 功能卡片 + 最新文章列表) │ ├── Login.vue 登录页(表单校验、JWT 存储) │ ├── Register.vue 注册页(含管理员注册码字段) │ ├── ArticleList.vue 文章列表(分类筛选、关键词搜索、分页) │ ├── ArticleDetail.vue 文章详情(正文渲染、评论列表、点赞/收藏按钮) │ ├── ArticleEdit.vue 文章编辑/创建(富文本编辑器、分类/标签选择) │ ├── Categories.vue 分类管理页(管理员专用,增删改查) │ ├── UserProfile.vue 个人主页(用户信息展示与编辑) │ ├── UserManage.vue 用户管理页(管理员专用,用户列表与删除) │ └── ChatAgent.vue AI 智能助手(多会话侧边栏、快捷指令卡片、对话气泡) │ ├── App.vue 根组件(Header + RouterView + Footer 布局) └── main.js 入口文件(挂载 App、注册 Router/Pinia/Element Plus) ``` --- ``` ┌──────────────────────────────────────────────┐ │ 前端 (Vue 3) │ │ views → api/request.js → Axios → /api/* │ └─────────────────────┬────────────────────────┘ │ HTTP (JSON) ┌─────────────────────▼────────────────────────┐ │ Controller 层 │ │ 接收请求、参数校验 (@Valid)、调用 Service │ └─────────────────────┬────────────────────────┘ │ ┌─────────────────────▼────────────────────────┐ │ Service 层 │ │ 业务逻辑、事务管理、权限判断 │ └─────────────────────┬────────────────────────┘ │ ┌─────────────────────▼────────────────────────┐ │ Mapper 层 │ │ MyBatis-Plus BaseMapper + 自定义 SQL │ └─────────────────────┬────────────────────────┘ │ ┌─────────────────────▼────────────────────────┐ │ MySQL 数据库 │ │ 8 张业务表 + MyBatis-Plus 自动建表 │ └──────────────────────────────────────────────┘ 横切关注点: ├── JwtInterceptor → 请求鉴权(提取 Token → 验证 → 存入 ThreadLocal) ├── GlobalExceptionHandler → 统一异常捕获 → 返回 Result 格式 └── request.js 拦截器 → 请求自动带 Token / 响应统一错误提示 ``` ## 技术栈 | 层级 | 技术 | 版本 | |------|------|------| | 后端框架 | Spring Boot | 3.5.6 | | ORM | MyBatis-Plus | 3.5.17 | | 数据库 | MySQL | 8.0+ | | 认证鉴权 | JWT (jjwt) | 0.12.6 | | 密码加密 | Spring Security Crypto | -- | | 参数校验 | Spring Validation | -- | | AI 大模型 | Spring AI Alibaba + DashScope (通义千问 Qwen-Max) | 1.0.0.2 | | 构建工具 (后端) | Maven | 3.8+ | | 前端框架 | Vue 3 | 3.5.13 | | 构建工具 (前端) | Vite | 6.3.5 | | UI 组件库 | Element Plus | 2.9.9 | | 路由 | Vue Router | 4.5.1 | | HTTP 客户端 | Axios | 1.9.0 | | 语言 | Java 21 / JavaScript ES Module | -- | --- ## 功能模块 ### 1. 用户认证模块 | API | 方法 | 说明 | |-----|------|------| | `/api/auth/register` | POST | 用户注册 | | `/api/auth/login` | POST | 用户登录,返回 JWT Token | - 支持管理员注册码 (`blog.admin-key`),注册时填写可成为管理员 - JWT Token 有效期 24 小时 ### 2. 文章模块 | API | 方法 | 说明 | |-----|------|------| | `/api/articles` | GET | 分页查询文章列表 | | `/api/articles` | POST | 创建文章(需登录) | | `/api/articles/{id}` | GET | 查看文章详情 | | `/api/articles/{id}` | PUT | 编辑文章(作者/管理员) | | `/api/articles/{id}` | DELETE | 删除文章(作者/管理员) | | `/api/articles/{id}/tags` | GET | 获取文章关联标签 | | `/api/articles/tags/all` | GET | 获取全部标签 | ### 3. 评论模块 | API | 方法 | 说明 | |-----|------|------| | `/api/comments/article/{articleId}` | GET | 获取文章评论列表 | | `/api/comments` | POST | 发表评论(需登录) | ### 4. 互动模块 | API | 方法 | 说明 | |-----|------|------| | `/api/likes/toggle/{articleId}` | POST | 切换点赞状态 | | `/api/likes/status/{articleId}` | GET | 查询点赞状态与数量 | | `/api/favorites/toggle/{articleId}` | POST | 切换收藏状态 | | `/api/favorites/status/{articleId}` | GET | 查询收藏状态与数量 | ### 5. 分类管理(管理员) | API | 方法 | 说明 | |-----|------|------| | `/api/categories` | GET | 获取分类列表 | | `/api/categories` | POST | 新增分类 | | `/api/categories/{id}` | PUT | 编辑分类 | | `/api/categories/{id}` | DELETE | 删除分类 | ### 6. 用户管理 | API | 方法 | 说明 | |-----|------|------| | `/api/users/{id}` | GET | 查看用户信息 | | `/api/users/{id}` | PUT | 编辑个人资料 | | `/api/users` | GET | 用户列表(管理员) | | `/api/users/{id}` | DELETE | 删除用户(管理员) | ### 7. AI 智能助手 | API | 方法 | 说明 | |-----|------|------| | `/api/chat/send` | POST | 发送消息,获取 AI 回复 | | `/api/chat/history/{conversationId}` | GET | 获取会话历史 | | `/api/chat/conversations` | GET | 获取会话列表 | | `/api/chat/conversation/{conversationId}` | DELETE | 删除会话 | --- ## 前端页面 | 路由 | 页面 | 说明 | |------|------|------| | `/` | Home.vue | 首页 | | `/articles` | ArticleList.vue | 文章列表 | | `/articles/:id` | ArticleDetail.vue | 文章详情 | | `/articles/new` | ArticleEdit.vue | 创建文章 | | `/articles/:id/edit` | ArticleEdit.vue | 编辑文章 | | `/login` | Login.vue | 登录 | | `/register` | Register.vue | 注册 | | `/categories` | Categories.vue | 分类管理 | | `/user/:id` | UserProfile.vue | 个人主页 | | `/admin/users` | UserManage.vue | 用户管理 | | `/chat` | ChatAgent.vue | AI 助手 | 公共组件:`AppHeader.vue`(导航栏)、`AppFooter.vue`(页脚) --- ## 数据库表 | 表名 | 说明 | |------|------| | `users` | 用户 (id, username, password, email, role) | | `articles` | 文章 (id, title, content, user_id, category_id) | | `comments` | 评论 (id, content, article_id, user_id) | | `categories` | 分类 (id, name, sort_order) | | `tags` | 标签 (id, name) | | `article_tags` | 文章-标签关联 | | `article_likes` | 点赞 | | `article_favorites` | 收藏 | --- ## 快速启动 **环境要求**:JDK 21+ / Maven 3.8+ / MySQL 8.0+ / Node.js 18+