清除用户登录的错误次数

This commit is contained in:
fangchengyan 2021-04-16 10:44:05 +08:00
parent 2b7ac9ab98
commit 5c24ff0148
4 changed files with 69 additions and 0 deletions

View File

@ -2,6 +2,8 @@ package com.ruoyi.web.controller.system;
import java.util.List; import java.util.List;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import com.ruoyi.common.core.text.Convert;
import org.apache.shiro.authz.annotation.RequiresPermissions; import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
@ -66,6 +68,8 @@ public class SysUserController extends BaseController
{ {
startPage(); startPage();
List<SysUser> list = userService.selectUserList(user); List<SysUser> list = userService.selectUserList(user);
list.forEach(sysUser -> sysUser.setErrorLoginTimes(
passwordService.getErrorLoginTimes(sysUser.getLoginName())));
return getDataTable(list); return getDataTable(list);
} }
@ -243,6 +247,34 @@ public class SysUserController extends BaseController
return toAjax(userService.deleteUserByIds(ids)); return toAjax(userService.deleteUserByIds(ids));
} }
@RequiresPermissions("system:user:clear")
@Log(title = "用户管理", businessType = BusinessType.CLEAN)
@PostMapping("/clearErrorLoginTimes")
@ResponseBody
public AjaxResult clearErrorLoginTimes(String ids)
{
try
{
int result = 0;
Long[] userIds = Convert.toLongArray(ids);
for (Long userId : userIds)
{
SysUser sysUser = userService.selectUserById(userId);
if(null == sysUser)
{
continue;
}
passwordService.clearLoginRecordCache(sysUser.getLoginName());
result++;
}
return AjaxResult.success(result);
}
catch (Exception e)
{
return error(e.getMessage());
}
}
/** /**
* 校验用户名 * 校验用户名
*/ */

View File

@ -92,6 +92,7 @@
<script th:inline="javascript"> <script th:inline="javascript">
var editFlag = [[${@permission.hasPermi('system:user:edit')}]]; var editFlag = [[${@permission.hasPermi('system:user:edit')}]];
var removeFlag = [[${@permission.hasPermi('system:user:remove')}]]; var removeFlag = [[${@permission.hasPermi('system:user:remove')}]];
var clearFlag = [[${@permission.hasPermi('system:user:clear')}]];
var resetPwdFlag = [[${@permission.hasPermi('system:user:resetPwd')}]]; var resetPwdFlag = [[${@permission.hasPermi('system:user:resetPwd')}]];
var prefix = ctx + "system/user"; var prefix = ctx + "system/user";
@ -154,6 +155,10 @@
field: 'phonenumber', field: 'phonenumber',
title: '手机' title: '手机'
}, },
{
field: 'errorLoginTimes',
title: '登录失败次数'
},
{ {
visible: editFlag == 'hidden' ? false : true, visible: editFlag == 'hidden' ? false : true,
title: '用户状态', title: '用户状态',
@ -177,6 +182,9 @@
var more = []; var more = [];
more.push("<a class='btn btn-default btn-xs " + resetPwdFlag + "' href='javascript:void(0)' onclick='resetPwd(" + row.userId + ")'><i class='fa fa-key'></i>重置密码</a> "); more.push("<a class='btn btn-default btn-xs " + resetPwdFlag + "' href='javascript:void(0)' onclick='resetPwd(" + row.userId + ")'><i class='fa fa-key'></i>重置密码</a> ");
more.push("<a class='btn btn-default btn-xs " + editFlag + "' href='javascript:void(0)' onclick='authRole(" + row.userId + ")'><i class='fa fa-check-square-o'></i>分配角色</a>"); more.push("<a class='btn btn-default btn-xs " + editFlag + "' href='javascript:void(0)' onclick='authRole(" + row.userId + ")'><i class='fa fa-check-square-o'></i>分配角色</a>");
if(null != row.errorLoginTimes && row.errorLoginTimes > 0) {
more.push("<a class='btn btn-default btn-xs " + clearFlag + "' href='javascript:void(0)' onclick='clearErrorLoginTimes(" + row.userId + ")'><i class='fa fa-remove'></i>清除失败登录</a>");
}
actions.push('<a tabindex="0" class="btn btn-info btn-xs" role="button" data-container="body" data-placement="left" data-toggle="popover" data-html="true" data-trigger="hover" data-content="' + more.join('') + '"><i class="fa fa-chevron-circle-right"></i>更多操作</a>'); actions.push('<a tabindex="0" class="btn btn-info btn-xs" role="button" data-container="body" data-placement="left" data-toggle="popover" data-html="true" data-trigger="hover" data-content="' + more.join('') + '"><i class="fa fa-chevron-circle-right"></i>更多操作</a>');
return actions.join(''); return actions.join('');
} }
@ -258,6 +266,13 @@
$.operate.post(prefix + "/changeStatus", { "userId": userId, "status": 0 }); $.operate.post(prefix + "/changeStatus", { "userId": userId, "status": 0 });
}) })
} }
/* 清除失败登录次数 */
function clearErrorLoginTimes(userId) {
$.modal.confirm("确认要清除用户失败登录次数吗?", function() {
$.operate.post(prefix + "/clearErrorLoginTimes", { "ids": userId });
})
}
</script> </script>
</body> </body>
<!-- 导入区域 --> <!-- 导入区域 -->

View File

@ -100,6 +100,8 @@ public class SysUser extends BaseEntity
/** 岗位组 */ /** 岗位组 */
private Long[] postIds; private Long[] postIds;
private Integer errorLoginTimes;
public SysUser() public SysUser()
{ {
@ -351,6 +353,16 @@ public class SysUser extends BaseEntity
this.postIds = postIds; this.postIds = postIds;
} }
public Integer getErrorLoginTimes()
{
return errorLoginTimes;
}
public void setErrorLoginTimes(Integer errorLoginTimes)
{
this.errorLoginTimes = errorLoginTimes;
}
@Override @Override
public String toString() { public String toString() {
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
@ -376,6 +388,7 @@ public class SysUser extends BaseEntity
.append("remark", getRemark()) .append("remark", getRemark())
.append("dept", getDept()) .append("dept", getDept())
.append("roles", getRoles()) .append("roles", getRoles())
.append("errorLoginTimes", getErrorLoginTimes())
.toString(); .toString();
} }
} }

View File

@ -73,6 +73,15 @@ public class SysPasswordService
return user.getPassword().equals(encryptPassword(user.getLoginName(), newPassword, user.getSalt())); return user.getPassword().equals(encryptPassword(user.getLoginName(), newPassword, user.getSalt()));
} }
public int getErrorLoginTimes(String username)
{
AtomicInteger atomicInteger = loginRecordCache.get(username);
if (null == atomicInteger) {
return 0;
}
return atomicInteger.get();
}
public void clearLoginRecordCache(String loginName) public void clearLoginRecordCache(String loginName)
{ {
loginRecordCache.remove(loginName); loginRecordCache.remove(loginName);