# 账号锁定功能说明 ## 功能概述 实现了账号密码登录错误5次后账号锁定,需要通过验证码登录才能解除的功能。 ## 功能特点 1. **自动锁定**:账号密码登录失败5次后自动锁定账号 2. **验证码解锁**:被锁定的账号只能通过手机验证码登录来解锁 3. **自动切换**:账号被锁定时,前端会自动切换到验证码登录模式 4. **解锁重置**:验证码登录成功后,失败次数会重置为0 ## 实现文件 ### 后端文件 1. `src/main/java/com/flow/pojo/LoginFailRecord.java` - 登录失败记录实体类 2. `src/main/java/com/flow/mapper/LoginFailRecordMapper.java` - 数据访问层 3. `src/main/java/com/flow/service/LoginFailRecordService.java` - 服务接口 4. `src/main/java/com/flow/service/impl/LoginFailRecordServiceImpl.java` - 服务实现 5. `src/main/java/com/flow/controller/LoginController.java` - 控制器(已修改) ### 前端文件 1. `src/webapp/page/Login.jsp` - 登录页面(已修改) ### 数据库文件 1. `login_fail_record.sql` - 数据库表创建脚本 ## 数据库表结构 ```sql CREATE TABLE `login_fail_record` ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID', `account` varchar(100) NOT NULL COMMENT '账号', `fail_count` int(11) DEFAULT 0 COMMENT '失败次数', `lock_time` datetime DEFAULT NULL COMMENT '锁定时间', `is_locked` tinyint(1) DEFAULT 0 COMMENT '是否锁定(0:未锁定,1:已锁定)', `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', PRIMARY KEY (`id`), UNIQUE KEY `uk_account` (`account`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='登录失败记录表'; ``` ## 使用流程 1. **正常登录**:用户使用账号密码登录 2. **失败记录**:登录失败时,系统记录失败次数 3. **自动锁定**:失败5次后,账号自动锁定 4. **锁定提示**:前端显示"账号已被锁定,请使用验证码登录解锁账号" 5. **自动切换**:前端自动切换到验证码登录模式 6. **验证码解锁**:用户通过手机验证码登录成功后,账号自动解锁 7. **重置计数**:解锁后,失败次数重置为0 ## API接口 ### 账号密码登录 - **URL**: `/HxzkFlow/hxzk/accountLogin` - **方法**: POST - **参数**: account, password - **返回**: - 正常登录:返回用户信息 - 账号锁定:返回 `{companyabbname: "LOCKED"}` ### 验证码解锁 - **URL**: `/HxzkFlow/hxzk/unlockAccountBySms` - **方法**: POST - **参数**: phone, verificationCode - **返回**: - 解锁成功:返回 `{companyabbname: "UNLOCKED"}` ## 注意事项 1. 需要在数据库中执行 `login_fail_record.sql` 创建表 2. 验证码验证逻辑需要根据实际情况调整 3. 可以根据需要调整最大失败次数(当前设置为5次) 4. 建议添加定时任务清理过期的锁定记录 ## 扩展功能 可以考虑添加以下功能: 1. 锁定时间限制(如30分钟后自动解锁) 2. 管理员手动解锁功能 3. 锁定记录查询和管理 4. 邮件通知功能