HTML+CSS+JS对话式实战(9)-项目总结与问题分析

点此查看 所有教程、项目、源码导航

文章目录

  • [1. 本篇任务说明](#1. 本篇任务说明)
  • [2. 项目整体回顾](#2. 项目整体回顾)
  • [3. 当前方案已经实现的能力](#3. 当前方案已经实现的能力)
  • [4. 当前项目存在的问题](#4. 当前项目存在的问题)
  • [5. 如果继续升级,可以往哪些方向走](#5. 如果继续升级,可以往哪些方向走)
  • [6. 结束语](#6. 结束语)
  • [7. 作者后话](#7. 作者后话)

1. 本篇任务说明

毛哥:副队,我们全部功能都写完了,是不是可以收尾了?

副队:对,这是整个教程的最后一篇。我们一起回顾一下整个项目,同时聊聊这套方案现存的短板,重点把项目里一处很关键的业务漏洞拿出来说清楚,知道它能做什么,以及为什么不能直接上线商用。

2. 项目整体回顾

副队:咱们从头到尾搭建的是一个社团活动发布报名平台,整套项目采用前后端分离,前端使用原生 HTML、CSS、JavaScript,后端基于 SpringBoot(当然后端其实不用管具体使用的什么技术),约定全部接口使用 POST,统一返回 {code, msg, data}。

毛哥:我梳理一下,最开始我们先敲定接口文档,之后搭建静态页面,接着对接接口,实现活动的查询、新增、修改、删除,再完成学生端查看活动与报名功能,最后补上登录校验、角色区分。

副队:没错。文件结构简单,所有页面、JS、CSS 放在同一目录;公共样式、通用请求函数单独抽离,弹窗、表格、导航都作为复用组件。登录采用 token 方案,前端用 localStorage 保存凭证,页面加载时增加访问拦截,未登录或者角色不匹配就跳转到登录页。

毛哥:跑起来效果确实没问题:管理员维护活动,学生浏览活动、提交报名,没有登录的用户无法直接访问后台和学生页面。

3. 当前方案已经实现的能力

副队:我们先整理已经落地的功能。

  • ✅ 接口规范统一 :全部使用 POST 请求,后端返回固定结构;前端封装通用 postRequest,统一发送请求、解析响应、捕获异常、处理 401 登录失效。
  • ✅ 活动管理后台:管理员查看活动列表、新增、编辑、删除活动;新增和编辑复用同一弹窗,减少重复代码。
  • ✅ 学生端页面:学生浏览活动,提交活动报名。
  • ✅ 登录与权限:独立登录页面,凭证持久化存储;学生页面、管理员页面都增加前端拦截;登录成功根据角色自动跳转对应页面。
  • ✅ 基础交互规范:弹窗居中,样式统一,导航栏右侧放置用户信息与退出按钮;CSS 拆分为公共样式和页面专属样式。

4. 当前项目存在的问题

毛哥:看起来功能齐全,但是应该还有不少缺陷吧?

副队:是的,这只是入门实战项目,目标是打通流程,很多生产环境需要考虑的地方都做了简化,其中有一个非常关键的业务漏洞。

毛哥:是什么漏洞?

副队:就是报名逻辑没有和当前登录用户身份强制绑定。现在前端提交报名的时候,如果我们只是手动传入姓名、学号这类信息,用户可以随便填写,哪怕已经登录,也可以填别人的学号,或者反复提交报名。正确的做法是:后端从请求携带的 token 里面解析出当前登录用户的学号、用户 ID,报名信息以 token 解析出来的身份为准,前端传入的身份信息只做展示,不做信任来源。就算前端篡改表单里面的学号,后端也会忽略,以 token 里面解析到的用户为准。

毛哥:我懂了!也就是说,不能相信前端传过来是谁,是谁在操作,由 token 说了算。

副队:没错。这个是业务层面的核心安全点。除此之外还有其他问题,我们分开来说。

副队:先继续说前端这边的问题。

第一,使用原生 JavaScript,没有框架。如果业务持续扩张,大量 DOM 操作会越来越杂乱,不容易维护,缺少组件化能力,新增页面时重复代码会持续变多。

第二,交互提示简陋,全部依靠 alert,没有优雅的消息提示框、加载 loading;网络延迟的时候,用户不知道请求正在处理,容易连续点击,造成重复提交。

第三,表单校验薄弱,目前只做简单的非空判断,缺少长度、格式实时校验,也没有防重复提交标记。

第四,localStorage 里面存放的角色仅仅只能用来做前端体验拦截,用户可以手动修改存储内容,不能依靠它实现真正的权限控制,权限校验必须放在后端。

第五,没有分页功能,如果活动数量变多,一次性返回全部数据,加载缓慢,消耗流量。

毛哥:那后端还有哪些不足?

副队:后端同样有很多简化点。

第一,我们当前使用的 token,默认无法主动作废。现在只是前端删除 token,如果拿到 token 的人在过期之前使用,依然可以调用接口;想要实现退出立刻失效,需要维护 token 黑名单。

第二,密码保护不足,如果直接明文传递密码,抓包可以获取;正式环境必须部署 HTTPS,增加对应的加密处理。

第三,参数校验、全局异常处理不够完善,非法参数传入时返回提示粗糙;缺少接口限流,容易遭到恶意频繁调用。

第四,没有操作日志,无法记录是谁、在什么时候执行新增、删除操作,如果出现误操作很难追溯。

第五,权限粒度比较粗,只有管理员和学生两种角色,如果后续需要社团审核人、活动负责人等角色,这套权限模型不够灵活。

除此之外,项目还缺少活动封面上传、报名名单导出、消息通知,移动端适配也只是基础,没有深度优化。

5. 如果继续升级,可以往哪些方向走

毛哥:如果我想继续完善这个项目,优先做哪些改动?

副队:优先补上刚才说到的身份绑定,再依次迭代其他功能,推荐这个顺序。

  1. 修复报名身份绑定:改造报名接口,后端从 token 获取当前登录用户信息,报名记录绑定 token 对应的用户,不再信任前端提交的学号、身份信息;同时增加限制,同一个用户不能重复报名同一个活动。
  2. 体验优化:替换 alert,增加 loading 和消息提示,增加防重复提交逻辑,完善表单校验。
  3. 增加分页:活动列表、报名列表改为后端分页返回,降低数据传输压力。
  4. 安全加固:部署 HTTPS,完善后端参数校验,增加接口限流,实现 token 黑名单。
  5. 拓展业务功能:活动封面上传、报名名单导出、活动上下架、消息通知。
  6. 技术进阶:如果想要继续学习,可以把前端迁移到 Vue,后端搭建一套更加完善的权限系统。

6. 结束语

毛哥:听你说完这么多缺点,那咱们这个项目是不是算做得比较差?

副队:倒不能这么理解。虽然还有一堆待优化的地方,但是整体是完整、可用的,作为学习项目来说已经非常不错了。一条完整的前后端链路我们从头到尾亲手走完,从定接口、写静态页面、对接 AJAX,到增删改查、登录鉴权,每一块都动手实现,该踩的坑也都认识到了。

毛哥:对,我感觉跟着做完一遍,终于明白前后端是怎么配合的了,之前看书总是很抽象。

副队:这就是咱们这个教程最核心的目标。它不需要一步到位做成商用产品,只要帮你建立起整套开发思维,弄懂流程、分清安全边界,这次学习的目的就完全达到了。后面你再去学框架、做更复杂的系统,心里就有底。

毛哥:明白了!先跑通,再慢慢打磨,这就是学习做项目的节奏。

副队:没错。如果之后想拓展新功能,或者尝试使用其他技术栈重写,这个项目都可以作为很好的基础。

7. 作者后话

其实写这么多东西,我个人感觉已经太多了。如果把其他功能再完善,在这个时期反而会大大增加初学者的难度。

我从心底认为,一个初学者在学习了HTML+CSS+JS之后,能把一个项目完整做到这个程度,已经是完完全全可以了。

所以后续的内容,我们会在学习更多知识后,进一步完善吧。

不积跬步,无以至千里,不积小流,无以成江海。

学习编程,莫不如是。

相关推荐
Hilaku1 小时前
MCP 协议会成为前端 AI 工程的标准接口吗?
前端·javascript·程序员
贾伟康2 小时前
【共创稿事节】HarmonyOS 7.0 Progress进度体系:从接入到生产验证
性能优化·实战·harmonyos·arkts·arkui
RobinDevNotes4 小时前
从 Electron 到 GPUI,9 个跨平台桌面方案该怎么选
前端·javascript·rust·electron·openresty·前端开发工具
程序员大阳5 小时前
HTML+CSS+JS对话式实战(6)-学生端查看活动功能开发
javascript·css·html·模块·查看学生
code2cat5 小时前
HTML基础篇之第一张网页:从index.html到浏览器里的任务清单
前端·html
子兮曰1 天前
Chrome 权限元素实战:144 与 151 的渐进增强写法
前端·javascript·chrome
强尼银手1 天前
我花一天做了个格斗游戏原型,判定全对,然后被「美术」劝退了
前端·javascript
总要学点什么1 天前
第98篇:三维特效-材质线效果——给一条线换十种材质,虚线的图案只填了一半
开发语言·前端·javascript·ecmascript·gis·webgl·材质
OpsEye1 天前
混合云 AI 架构,如何统一做敏感内容拦截?
javascript·ai编程