diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/monitor/SysLoginInfoController.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/monitor/SysLoginInfoController.java index 09df7635c..2db084ba9 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/monitor/SysLoginInfoController.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/monitor/SysLoginInfoController.java @@ -4,12 +4,15 @@ import cn.dev33.satoken.annotation.SaCheckPermission; import com.baomidou.lock.annotation.Lock4j; import jakarta.servlet.http.HttpServletResponse; import lombok.RequiredArgsConstructor; -import org.dromara.common.core.domain.PageResult; +import org.dromara.common.core.constant.CacheConstants; import org.dromara.common.core.domain.R; import org.dromara.common.excel.utils.ExcelUtil; +import org.dromara.common.redis.annotation.RepeatSubmit; import org.dromara.common.log.annotation.Log; import org.dromara.common.log.enums.BusinessType; import org.dromara.common.mybatis.core.page.PageQuery; +import org.dromara.common.core.domain.PageResult; +import org.dromara.common.redis.utils.RedisUtils; import org.dromara.common.web.core.BaseController; import org.dromara.system.domain.bo.SysLoginInfoBo; import org.dromara.system.domain.vo.SysLoginInfoVo; @@ -49,7 +52,7 @@ public class SysLoginInfoController extends BaseController { * 导出系统访问记录列表。 * * @param loginInfo 查询条件 - * @param response HTTP 响应 + * @param response HTTP 响应 */ @Log(title = "登录日志", businessType = BusinessType.EXPORT) @SaCheckPermission("monitor:logininfo:export") @@ -86,4 +89,22 @@ public class SysLoginInfoController extends BaseController { return R.ok(); } + /** + * 清除指定用户的登录失败锁定状态。 + * + * @param userName 用户名 + * @return 操作结果 + */ + @SaCheckPermission("monitor:logininfo:unlock") + @Log(title = "账户解锁", businessType = BusinessType.OTHER) + @RepeatSubmit() + @GetMapping("/unlock/{userName}") + public R unlock(@PathVariable("userName") String userName) { + String loginName = CacheConstants.PWD_ERR_CNT_KEY + userName; + if (RedisUtils.hasKey(loginName)) { + RedisUtils.deleteObject(loginName); + } + return R.ok(); + } + }