<!-- Source: https://interview-questions.io.nexus/tio-boot-login -->

# 题目：基于 Java 的 Tio-Boot 框架实现简单登录系统

### 一、项目背景

某网站需要开发一个「用户登录模块」，以便已注册用户通过账号和密码登录系统，访问受保护的页面。请使用 **Java + tio-boot 框架** 完成一个最小可用的登录系统，并满足以下功能与非功能性要求。

---

### 二、功能要求

1. **项目基础环境**

   1. 使用 **tio-boot** 搭建 HTTP 服务，端口自定（例如 8080）。
   2. 使用 Maven 管理依赖，项目结构清晰，能够正常启动并接收 HTTP 请求。
   3. 所有代码需具备基本的注释（类注释、关键方法注释）。

2. **用户数据与认证逻辑**

   1. 实现一个简单的用户数据存储方式（可选其一）：

      * 内存中的用户列表（写死在代码里），至少包含 2 个用户；
      * 或基于数据库（如 MySQL）/ 文件的简单存储。
   2. 每个用户至少包含字段：

      * `username`（用户名）
      * `password`（密码，可允许明文存储，也可加分地实现加密存储）
   3. 实现登录校验逻辑：

      * 当用户提交用户名和密码时，系统根据存储的用户数据进行匹配；
      * 用户名或密码错误时，给出明确提示信息。

3. **接口 / 页面设计**

   接口 + 页面」两种方式实现：

   #### 方案 B：简单页面形式（适合后台模板）

   1. 提供登录页，例如 `GET /login`：

      * 返回包含用户名、密码输入框的 HTML 页面；
      * 表单提交到 `POST /login`。
   2. 登录成功：

      * 跳转到欢迎页面，如 `/index` 或 `/home`，展示当前登录用户名；
   3. 登录失败：

      * 回到登录页，在页面中显示错误信息（如「用户名或密码错误」）。

   （考生可任选一种方案实现，也可两种都实现，视为加分项）

4. **会话管理（Session）**

   1. 使用 tio-boot 提供的机制（或自定义）实现简单会话管理：

      * 登录成功后，将用户信息保存在会话 / 内存中（例如绑定到 sessionId）；
      * 后续访问受保护资源时，根据会话信息判断用户是否已登录。
   2. 实现退出登录功能：

      * 提供 `/logout` 接口或按钮，清除会话信息；
      * 退出后访问受保护资源，应该提示未登录。

5. **异常与边界情况处理**

   1. 对以下情况进行处理并给出合理提示：

      * 空用户名或密码；
      * 访问不存在的接口或页面；
      * 非法请求方式（例如接口只允许 POST，却使用 GET）。
   2. 日志中能打印关键错误信息（如登录失败原因）。

---

### 三、非功能性要求

1. **代码规范**

   * 包名、类名命名规范；
   * 有必要的注释，逻辑清晰；
   * 目录划分合理（如 `controller`、`service`、`model` 等）。

2. **安全性基础要求**

   * 不在响应中泄露敏感信息（例如不返回原始密码）；
   * 提示信息不要过于具体（可选加分，例如区分「用户名不存在」和「密码错误」是否隐藏）。

3. **可扩展性（加分项）**
   以下任意一项可作为加分项：

   * 登录失败超过 5 次，临时锁定该用户一段时间；
   * 注册接口（`POST /register`），支持新用户注册；
   * 使用加密算法（如 MD5、SHA-256 等）对密码进行摘要存储；
   * 记住我功能（简易版），在一定时间内免登录。

---

### 四、提交内容

1. 完整项目源码（包含 `pom.xml` 或 `build.gradle`）。
2. 简要说明文档（README），内容包括：

   * 项目结构说明；
   * 如何启动项目；
   * 接口列表或使用说明；
   * 已实现与未实现的功能说明（尤其是加分项）。

---

### 五、评分标准（参考）

总分 100 分，可按以下维度打分（教师可自行调整）：

1. **基本功能实现（40 分）**

   * 登录接口 / 页面可用：20 分
   * 用户数据校验正确：10 分
   * 受保护资源的访问控制：10 分

2. **会话管理与退出登录（20 分）**

   * 登录状态保持及校验：10 分
   * 退出登录正确清理状态：10 分

3. **代码规范与结构设计（20 分）**

   * 目录结构清晰：5 分
   * 命名规范、注释合理：10 分
   * 使用 tio-boot 的配置与启动合理：5 分

4. **异常处理与用户体验（10 分）**

   * 错误提示与异常处理：10 分

5. **加分项（最多 10 分）**

   * 密码加密、注册功能、登录失败锁定、记住我等任意实现可酌情加分。
