题目:基于 Java 的 Tio-Boot 框架实现简单登录系统
一、项目背景
某网站需要开发一个「用户登录模块」,以便已注册用户通过账号和密码登录系统,访问受保护的页面。请使用 Java + tio-boot 框架 完成一个最小可用的登录系统,并满足以下功能与非功能性要求。
二、功能要求
项目基础环境
- 使用 tio-boot 搭建 HTTP 服务,端口自定(例如 8080)。
- 使用 Maven 管理依赖,项目结构清晰,能够正常启动并接收 HTTP 请求。
- 所有代码需具备基本的注释(类注释、关键方法注释)。
用户数据与认证逻辑
实现一个简单的用户数据存储方式(可选其一):
- 内存中的用户列表(写死在代码里),至少包含 2 个用户;
- 或基于数据库(如 MySQL)/ 文件的简单存储。
每个用户至少包含字段:
username(用户名)password(密码,可允许明文存储,也可加分地实现加密存储)
实现登录校验逻辑:
- 当用户提交用户名和密码时,系统根据存储的用户数据进行匹配;
- 用户名或密码错误时,给出明确提示信息。
接口 / 页面设计
接口 + 页面」两种方式实现:
方案 B:简单页面形式(适合后台模板)
提供登录页,例如
GET /login:- 返回包含用户名、密码输入框的 HTML 页面;
- 表单提交到
POST /login。
登录成功:
- 跳转到欢迎页面,如
/index或/home,展示当前登录用户名;
- 跳转到欢迎页面,如
登录失败:
- 回到登录页,在页面中显示错误信息(如「用户名或密码错误」)。
(考生可任选一种方案实现,也可两种都实现,视为加分项)
会话管理(Session)
使用 tio-boot 提供的机制(或自定义)实现简单会话管理:
- 登录成功后,将用户信息保存在会话 / 内存中(例如绑定到 sessionId);
- 后续访问受保护资源时,根据会话信息判断用户是否已登录。
实现退出登录功能:
- 提供
/logout接口或按钮,清除会话信息; - 退出后访问受保护资源,应该提示未登录。
- 提供
异常与边界情况处理
对以下情况进行处理并给出合理提示:
- 空用户名或密码;
- 访问不存在的接口或页面;
- 非法请求方式(例如接口只允许 POST,却使用 GET)。
日志中能打印关键错误信息(如登录失败原因)。
三、非功能性要求
代码规范
- 包名、类名命名规范;
- 有必要的注释,逻辑清晰;
- 目录划分合理(如
controller、service、model等)。
安全性基础要求
- 不在响应中泄露敏感信息(例如不返回原始密码);
- 提示信息不要过于具体(可选加分,例如区分「用户名不存在」和「密码错误」是否隐藏)。
可扩展性(加分项) 以下任意一项可作为加分项:
- 登录失败超过 5 次,临时锁定该用户一段时间;
- 注册接口(
POST /register),支持新用户注册; - 使用加密算法(如 MD5、SHA-256 等)对密码进行摘要存储;
- 记住我功能(简易版),在一定时间内免登录。
四、提交内容
完整项目源码(包含
pom.xml或build.gradle)。简要说明文档(README),内容包括:
- 项目结构说明;
- 如何启动项目;
- 接口列表或使用说明;
- 已实现与未实现的功能说明(尤其是加分项)。
五、评分标准(参考)
总分 100 分,可按以下维度打分(教师可自行调整):
基本功能实现(40 分)
- 登录接口 / 页面可用:20 分
- 用户数据校验正确:10 分
- 受保护资源的访问控制:10 分
会话管理与退出登录(20 分)
- 登录状态保持及校验:10 分
- 退出登录正确清理状态:10 分
代码规范与结构设计(20 分)
- 目录结构清晰:5 分
- 命名规范、注释合理:10 分
- 使用 tio-boot 的配置与启动合理:5 分
异常处理与用户体验(10 分)
- 错误提示与异常处理:10 分
加分项(最多 10 分)
- 密码加密、注册功能、登录失败锁定、记住我等任意实现可酌情加分。
