编辑 | blame | 历史 | 原始文档

账号锁定功能说明

功能概述

实现了账号密码登录错误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 - 数据库表创建脚本

数据库表结构

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. 邮件通知功能