diff --git a/kernel-d-auth/auth-api/src/main/java/cn/stylefeng/roses/kernel/auth/api/pojo/auth/LoginRequest.java b/kernel-d-auth/auth-api/src/main/java/cn/stylefeng/roses/kernel/auth/api/pojo/auth/LoginRequest.java index 01334b841..aa873532f 100644 --- a/kernel-d-auth/auth-api/src/main/java/cn/stylefeng/roses/kernel/auth/api/pojo/auth/LoginRequest.java +++ b/kernel-d-auth/auth-api/src/main/java/cn/stylefeng/roses/kernel/auth/api/pojo/auth/LoginRequest.java @@ -45,6 +45,7 @@ public class LoginRequest extends BaseRequest { * 账号 */ @NotBlank(message = "账号不能为空") + @NotBlank(message = "账号不能为空", groups = cancelFreeze.class) @ChineseDescription("账号") private String account; @@ -85,4 +86,10 @@ public class LoginRequest extends BaseRequest { @ChineseDescription("租户编码") private String tenantCode; + /** + * 取消账号冻结 + */ + public @interface cancelFreeze { + } + } diff --git a/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/system/api/pojo/user/SysUserDTO.java b/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/system/api/pojo/user/SysUserDTO.java index ed424a157..c012895a1 100644 --- a/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/system/api/pojo/user/SysUserDTO.java +++ b/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/system/api/pojo/user/SysUserDTO.java @@ -149,4 +149,10 @@ public class SysUserDTO { @ChineseDescription("是否是超级管理员,超级管理员可以拥有所有权限(Y-是,N-否)") private String superAdminFlag; + /** + * 是否密码重试次数过多,当密码重试次数超过5次这个状态就会激活 + */ + @ChineseDescription("是否密码重试次数过多") + private Boolean loginErrorCountFlag = false; + } diff --git a/kernel-s-system/system-business-user/src/main/java/cn/stylefeng/roses/kernel/system/modular/user/controller/LoginController.java b/kernel-s-system/system-business-user/src/main/java/cn/stylefeng/roses/kernel/system/modular/user/controller/LoginController.java index 95c05efa5..bdcad9c28 100644 --- a/kernel-s-system/system-business-user/src/main/java/cn/stylefeng/roses/kernel/system/modular/user/controller/LoginController.java +++ b/kernel-s-system/system-business-user/src/main/java/cn/stylefeng/roses/kernel/system/modular/user/controller/LoginController.java @@ -183,7 +183,7 @@ public class LoginController { * @date 2022/1/22 16:40 */ @PostResource(name = "取消帐号冻结", path = "/cancelFreeze") - public ResponseData cancelFreeze(@RequestBody LoginRequest loginRequest) { + public ResponseData cancelFreeze(@RequestBody @Validated(LoginRequest.cancelFreeze.class) LoginRequest loginRequest) { authServiceApi.cancelFreeze(loginRequest); return new SuccessResponseData<>(); } diff --git a/kernel-s-system/system-business-user/src/main/java/cn/stylefeng/roses/kernel/system/modular/user/service/impl/SysUserServiceImpl.java b/kernel-s-system/system-business-user/src/main/java/cn/stylefeng/roses/kernel/system/modular/user/service/impl/SysUserServiceImpl.java index 9ad4403aa..9d2d0ca04 100644 --- a/kernel-s-system/system-business-user/src/main/java/cn/stylefeng/roses/kernel/system/modular/user/service/impl/SysUserServiceImpl.java +++ b/kernel-s-system/system-business-user/src/main/java/cn/stylefeng/roses/kernel/system/modular/user/service/impl/SysUserServiceImpl.java @@ -30,6 +30,7 @@ import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import cn.stylefeng.roses.kernel.auth.api.SessionManagerApi; +import cn.stylefeng.roses.kernel.auth.api.constants.LoginCacheConstants; import cn.stylefeng.roses.kernel.auth.api.context.LoginContext; import cn.stylefeng.roses.kernel.auth.api.enums.DataScopeTypeEnum; import cn.stylefeng.roses.kernel.auth.api.exception.enums.AuthExceptionEnum; @@ -149,6 +150,9 @@ public class SysUserServiceImpl extends ServiceImpl impl @Resource private ExpandApi expandApi; + @Resource(name = "loginErrorCountCacheApi") + private CacheOperatorApi loginErrorCountCacheApi; + @Override @Transactional(rollbackFor = Exception.class) public void add(SysUserRequest sysUserRequest) { @@ -461,6 +465,16 @@ public class SysUserServiceImpl extends ServiceImpl impl Page userPage = this.baseMapper.findUserPage(PageFactory.defaultPage(), sysUserRequest); + // 获取所有被禁用的用户,如果有被禁用的用户,则返回被锁状态 + for (SysUserDTO record : userPage.getRecords()) { + if (loginErrorCountCacheApi.contains(record.getAccount())) { + Integer errorCount = loginErrorCountCacheApi.get(record.getAccount()); + if (errorCount >= LoginCacheConstants.MAX_ERROR_LOGIN_COUNT) { + record.setLoginErrorCountFlag(true); + } + } + } + return PageResultFactory.createPageResult(userPage); }