Web p11--终极项目
动漫网站一、项目定位一个 Spring Boot MyBatis Thymeleaf Vue.js Element UI的动漫资讯社区平台支持普通用户(USER) 和 管理员(ADMIN)双角色体系。二、核心功能特色及实现代码1双角色认证体系前端自适应 UI描述登录后根据角色显示不同导航栏——普通用户看到个人中心/退出登录管理员看到用户管理/文章审核/退出管理。后端逻辑UserController.java登录时区分存入 Session 的 key// USER → session.setAttribute(loginUser, user) // ADMIN → session.setAttribute(admin, user) session.setAttribute(loginUser, user)两个 GET 接口分别校验不同的 session keyGetMapping(/api/auth/current) // 检查 session.getAttribute(loginUser) GetMapping(/api/auth/admin) // 检查 session.getAttribute(admin)前端逻辑所有模板index.html、category.html、detail.html在created()钩子中同时调用两个接口根据结果设置isAdmin/isLogin布尔值用v-if控制导航栏按钮的显隐。!-- 登录前显示 -- a v-if!isLogin href/login登录/a !-- 普通用户显示 -- a v-ifisLogin !isAdmin hrefjavascript:; onclickhandleLogout()退出登录/a !-- 管理员显示 -- a v-ifisAdmin hrefjavascript:; onclickhandleLogout()退出管理/a2文章审核工作流三态状态机描述用户发布文章默认status0待审核管理员可批准→1或驳回→2。首页和分类页仅展示status1的文章个人中心可按状态筛选。状态流转用户发布 → [待审核 0] → 管理员审核 → [已通过 1] (前台可见→ [已驳回 2] (仅作者可见)用户编辑 → 重置为 [待审核 0]后端逻辑AnimeArticleController.java发布接口PostMapping(/api/articles) public Result publish(RequestBody AnimeArticle article, HttpSession session) { SysUser user (SysUser) session.getAttribute(loginUser); article.setAuthorId(user.getId()); article.setStatus(0); // 默认待审核 articleService.insert(article); return Result.success(); }审核接口管理员专用PutMapping(/api/admin/articles/{id}/approve) // status1 PutMapping(/api/admin/articles/{id}/reject) // status2 驳回原因AnimeArticleService查询时过滤// 前台列表WHERE status 1 AND cat_id #{catId} // 个人中心WHERE author_id #{userId}支持 status 筛选参数 // 管理员查全部可按 status 过滤前端逻辑发布页publish.html选择分类 → 提交 POST → 提示发布成功等待审核管理后台admin/article-manage.html待审核列表 → 点击通过/驳回 → 调用 PUT 接口 → 刷新列表3四大分类 动态布局描述catId1/2/3/4分别代表漫圈动态、番剧评测、同好讨论、追番日历同一条路由/category/{catId}根据 catId 加载不同的布局和内容。后端逻辑PageController.java统一路由转发GetMapping(/category/{catId}) public String category(PathVariable Integer catId, Model model) { model.addAttribute(catId, catId); return category; }AnimeArticleController.java分类查询接口GetMapping(/api/articles) public Result listByCategory( RequestParam Integer catId, RequestParam(defaultValue 1) int page, RequestParam(defaultValue 10) int size) { return Result.success(articleService.pageByCategory(catId, page, size)); }前端逻辑category.html从 Thymeleaf 模型获取catId在 Vue data 中存储页面标题和 banner 根据 catId 动态切换。例如catId4时加载追番日历组件而非文章列表。4论坛热帖排行 通用详情页描述论坛帖子按回复数 TOP 8 展示在首页侧边栏详情页/detail?typeid一个模板承载文章/帖子/番剧三种内容。后端逻辑ForumPostController.java热帖接口GetMapping(/api/forum/rank) public Result rank() { return Result.success(forumPostService.top8ByReplyCount()); }MyBatis 注解实现Select(SELECT TOP 8 * FROM forum_post ORDER BY reply_count DESC) ListForumPost selectTop8();详情路由PageController.javaGetMapping(/detail) public String detail(RequestParam String type, RequestParam Long id, Model model) { model.addAttribute(type, type); // article | post | schedule model.addAttribute(id, id); return detail; }前端逻辑detail.html根据 URL 参数type决定调用/api/articles/{id}或/api/forum/{id}或/api/schedules/{id}渲染对应的内容结构。5MD5 加盐密码存储描述密码使用 MD5 固定盐值demo加密后存入数据库注册和登录均做加盐比对。后端实现util/MD5Util.javapublic static String md5(String input) { return DigestUtils.md5Hex(input demo); }注册逻辑UserController.javaPostMapping(/api/auth/register) public Result register(RequestBody SysUser user) { user.setPassword(MD5Util.md5(user.getPassword())); userService.register(user); return Result.success(); }登录逻辑PostMapping(/api/auth/login) public Result login(RequestBody SysUser loginUser, HttpSession session) { SysUser user userService.login(loginUser.getUsername(), MD5Util.md5(loginUser.getPassword())); if (user.getStatus() 0) return Result.error(账号已被禁用); // 存入 session... }6Session 拦截器 优雅退出描述/admin/**路由和/api/admin/**API 由LoginInterceptor保护未登录管理员自动重定向退出登录调用后端session.invalidate()。后端config/LoginInterceptor.javapublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { if (request.getSession().getAttribute(admin) ! null) return true; response.sendRedirect(/login); return false; }config/WebConfig.javaregistry.addInterceptor(loginInterceptor) .addPathPatterns(/admin/**, /api/admin/**);UserController.java退出接口PostMapping(/api/auth/logout) public Result logout(HttpSession session) { session.invalidate(); // 彻底销毁 session return Result.success(); }前端退出函数8 个模板统一function handleLogout() { fetch(/api/auth/logout, { method: POST, credentials: same-origin }) .then(function() { window.location.href /; }) .catch(function() { window.location.href /; }); }7管理员后台用户管理 内容审核描述管理员可查看用户列表支持关键词搜索、禁用/启用账号、重置密码审核文章通过/驳回。后端AdminController.java核心接口接口功能GET /api/admin/users分页 关键词搜索用户PUT /api/admin/users/{id}/status切换启用/禁用PUT /api/admin/users/{id}/reset-pwd重置为 MD5(123456)GET /api/admin/articles查看所有文章可按 status 筛选PUT /api/admin/articles/{id}/approve审核通过PUT /api/admin/articles/{id}/reject审核驳回附带原因前端逻辑admin/user-manage.htmlElement UI 表格 分页 搜索框行内操作按钮启用/禁用/重置密码admin/article-manage.html按状态 Tab 切换待审核/已通过/已驳回每个文章卡片上有通过/驳回按钮三、整体架构总结┌──────────────────────────────────────────────────┐│ 前端 (Thymeleaf) ││ index / category / detail / profile / publish... ││ Vue.js Element UI │└────────────────────┬─────────────────────────────┘│ HTTP / JSON┌────────────────────▼─────────────────────────────┐│ Controller 层 (6个控制器) ││ UserController | AnimeArticleController ││ ForumPostController | AnimeScheduleController ││ AdminController | PageController (路由) │└────────────────────┬─────────────────────────────┘│┌────────────────────▼─────────────────────────────┐│ Service 层 (4个Service) ││ AnimeArticleService | ForumPostService ││ AnimeScheduleService | SysUserService │└────────────────────┬─────────────────────────────┘│┌────────────────────▼─────────────────────────────┐│ Mapper 层 (纯注解 MyBatis) ││ Select / Insert / Update / Delete │└────────────────────┬─────────────────────────────┘│┌────────────────────▼─────────────────────────────┐│ SQL Server 数据库 (Anime 库, 1433端口) ││ sys_user | anime_article | forum_post ││ anime_schedule │└──────────────────────────────────────────────────┘关注点实现方式安全认证Session LoginInterceptor 拦截/admin/**密码加密MD5UtilMD5 盐值 demo统一响应Result.java(code message data)CSRF 防护fetch 请求使用credentials: same-origin前端通知Element UIthis.$message/this.$notify总结这是一个麻雀虽小五脏俱全的 Spring Boot 实战项目核心在于双角色认证体系文章三态审核工作流追番日历周视图一个模板承载多类内容的通用详情路由。

相关新闻

Python任意形状词云生成:掩膜图处理与中文支持实战

Python任意形状词云生成:掩膜图处理与中文支持实战

1. 项目概述:用任意形状生成词云,不只是圆形那么简单“Text Data Visualization with WordCloud of Any Shape in Python”——这个标题乍看是讲词云,但真正戳中痛点的其实是“Any Shape”四个字母。我做文本可视化项目快八年,从最…

2026/7/14 5:47:08 阅读更多 →
C++与OpenCV实现证件照背景替换:从原理到生产级代码详解

C++与OpenCV实现证件照背景替换:从原理到生产级代码详解

1. 项目概述与核心价值最近在整理个人资料时,发现手头一堆证件照背景颜色五花八门,蓝底、红底、白底都有,每次需要特定背景时都得重新去照相馆拍,既费钱又费时间。作为一个常年和图像处理打交道的开发者,我就在想&…

2026/7/14 5:43:06 阅读更多 →
Spring Boot 自动配置原理

Spring Boot 自动配置原理

Spring Boot 自动配置原理 一句话 Spring Boot 启动时根据引入的 starter 和 application.yml 配置,通过 Conditional 条件过滤候选自动配置类,有条件地注册基础设施 Bean,用户自定义优先,框架默认兜底。 1. 核心链路 ① 启动类…

2026/7/14 5:43:06 阅读更多 →

最新新闻

手把手教你一步步完成基于STM32的HC-SR04超声波测距模块的驱动

手把手教你一步步完成基于STM32的HC-SR04超声波测距模块的驱动

(一)STM32CubeMx的工程配置创建STM32工程,首先勾选SYS里面的Debug选择Serial Wire,否则下一次将无法烧录,关闭SWD烧录接口,会出现无法烧录的情况。之后配置RCC时钟,选择高速的外部晶振。首先在直…

2026/7/14 7:35:49 阅读更多 →
从零吃透 C 语言数组:大一萌新的复盘总结

从零吃透 C 语言数组:大一萌新的复盘总结

数组的认识大家好呀,好久不见~转眼假期已经到啦,大一上半程的校园生活伴着期末复习备考的忙碌告一段落,我也总算对大学的学习节奏慢慢熟悉了。这段时间跟着课程啃完了 C 语言指针的内容,也刷了不少对应的练习题&#x…

2026/7/14 7:35:49 阅读更多 →
在Windows 11上运行Android应用的终极指南:告别模拟器的全新体验

在Windows 11上运行Android应用的终极指南:告别模拟器的全新体验

在Windows 11上运行Android应用的终极指南:告别模拟器的全新体验 【免费下载链接】WSA Developer-related issues and feature requests for Windows Subsystem for Android 项目地址: https://gitcode.com/gh_mirrors/ws/WSA 你是否曾经希望在电脑上流畅运行…

2026/7/14 7:35:49 阅读更多 →
GitHub中文界面解决方案:告别语言障碍的智能翻译插件实践指南

GitHub中文界面解决方案:告别语言障碍的智能翻译插件实践指南

GitHub中文界面解决方案:告别语言障碍的智能翻译插件实践指南 【免费下载链接】github-chinese GitHub 汉化插件,GitHub 中文化界面。 (GitHub Translation To Chinese) 项目地址: https://gitcode.com/gh_mirrors/gi/github-chinese GitHub作为全…

2026/7/14 7:29:48 阅读更多 →
10个使用SkinTokens-bf16的实用技巧:优化3D角色动画绑定效果的终极指南

10个使用SkinTokens-bf16的实用技巧:优化3D角色动画绑定效果的终极指南

10个使用SkinTokens-bf16的实用技巧:优化3D角色动画绑定效果的终极指南 【免费下载链接】SkinTokens-bf16 项目地址: https://ai.gitcode.com/hf_mirrors/mlx-community/SkinTokens-bf16 SkinTokens-bf16是一款基于MLX框架的3D角色自动绑定工具,…

2026/7/14 7:29:48 阅读更多 →
MLX社区力作:VibeThinker-3B-4bit如何推动边缘AI的普及与发展

MLX社区力作:VibeThinker-3B-4bit如何推动边缘AI的普及与发展

MLX社区力作:VibeThinker-3B-4bit如何推动边缘AI的普及与发展 【免费下载链接】VibeThinker-3B-4bit 项目地址: https://ai.gitcode.com/hf_mirrors/mlx-community/VibeThinker-3B-4bit VibeThinker-3B-4bit是MLX社区推出的一款高效能AI模型,基于…

2026/7/14 7:27:47 阅读更多 →

日新闻

AI Agent数据越界行为如何被精准溯源?——基于GDPR/CCPA双合规的5层审计框架实战指南

AI Agent数据越界行为如何被精准溯源?——基于GDPR/CCPA双合规的5层审计框架实战指南

更多请点击: https://kaifayun.com 第一章:AI Agent数据越界行为的合规性挑战与溯源必要性 AI Agent在自主执行任务过程中,可能因提示注入、上下文污染或权限配置缺陷,无意或有意访问、缓存、传输受保护数据(如PII、G…

2026/7/14 0:01:13 阅读更多 →
Perplexity vs ChatGPT vs Claude:实测127组复杂查询任务,谁才是真正可靠的“事实型AI助手”?

Perplexity vs ChatGPT vs Claude:实测127组复杂查询任务,谁才是真正可靠的“事实型AI助手”?

更多请点击: https://codechina.net 第一章:Perplexity 怎么用 Perplexity 是衡量语言模型预测能力的核心指标,数值越低表示模型对文本序列的不确定性越小、预测越精准。它本质上是交叉熵损失的指数形式,计算公式为:…

2026/7/14 0:01:13 阅读更多 →
全球首发!五一视界定制物理AI卫星ECS-1剑指万亿赛道

全球首发!五一视界定制物理AI卫星ECS-1剑指万亿赛道

五一视界发布公告,近日,公司与环天智慧科技股份有限公司(“环天智慧”)正式达成空天领域战略合作。环天智慧是国内领先、聚焦天基对地观测遥感卫星总体研制与在轨运营的商业航天企业,同时也是西南地区规模最大、具备全自主可控遥感卫星星座建…

2026/7/14 0:03:13 阅读更多 →

周新闻

互联网大厂 Java 求职面试:燕双非的搞笑回答与技术探讨

互联网大厂 Java 求职面试:燕双非的搞笑回答与技术探讨

互联网大厂 Java 求职面试:燕双非的搞笑回答与技术探讨 在一个阳光明媚的上午,互联网大厂的面试官坐在桌前,准备迎接他的面试候选人——燕双非,一个以搞笑和幽默著称的程序员。第一轮提问 面试官:燕双非,作…

2026/7/13 4:38:36 阅读更多 →
车载以太网PMA测试设备选型:示波器、VNA、信号源3类仪器关键参数与预算评估

车载以太网PMA测试设备选型:示波器、VNA、信号源3类仪器关键参数与预算评估

车载以太网PMA测试设备选型:示波器、VNA、信号源3类仪器关键参数与预算评估在智能驾驶和车联网技术快速发展的今天,车载以太网作为新一代车载网络的核心传输技术,其物理层性能直接决定了数据传输的可靠性和稳定性。1000BASE-T1作为当前主流的…

2026/7/13 4:38:38 阅读更多 →
VSCode EIDE 插件 2.0:APM32/STM32 项目迁移实战,5步完成Keil工程转换

VSCode EIDE 插件 2.0:APM32/STM32 项目迁移实战,5步完成Keil工程转换

VSCode EIDE 插件 2.0:APM32/STM32 项目迁移实战指南嵌入式开发领域正经历一场工具链的静默革命。当传统Keil用户首次打开VSCode的扩展市场搜索EIDE时,往往会惊讶于这个看似简单的插件竟能重构十余年的开发习惯。本文将揭示如何用五个精准步骤&#xff0…

2026/7/14 7:15:24 阅读更多 →

月新闻