Browse Source

七院v2.1.3用户账号锁定、登录超时等异常优化

songxinlu 3 years ago
parent
commit
2a39c4dee8

+ 1 - 1
doc/036.20211122_2.1.3/qc_initv2.1.3.sql

@@ -21,4 +21,4 @@ INSERT INTO `sys_dictionary_info` (`group_type`, `name`, `val`, `return_type`, `
 /**
 sys_hospital_set表新增是否开启用户锁定配置
  */
-INSERT INTO `sys_hospital_set` (`hospital_id`, `name`, `code`, `value`, `remark`) VALUES ('35', '密码错误锁定机制', 'lock_user', 'true', '密码错误锁定机制');
+INSERT INTO `sys_hospital_set` (`hospital_id`, `name`, `code`, `value`, `remark`) VALUES ('14', '密码错误锁定机制', 'lock_user', 'true', '密码错误锁定机制');

+ 8 - 5
src/main/java/com/diagbot/facade/SysUserFacade.java

@@ -25,6 +25,7 @@ import com.diagbot.exception.ServiceErrorCode;
 import com.diagbot.service.impl.SysUserDeptServiceImpl;
 import com.diagbot.service.impl.SysUserRoleServiceImpl;
 import com.diagbot.service.impl.SysUserServiceImpl;
+import com.diagbot.task.LockTask;
 import com.diagbot.util.BeanUtil;
 import com.diagbot.util.DateUtil;
 import com.diagbot.util.EntityUtil;
@@ -53,9 +54,9 @@ import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import javax.servlet.http.HttpSession;
 import java.awt.image.BufferedImage;
-import java.io.ByteArrayOutputStream;
 import java.io.IOException;
 import java.util.*;
+import java.util.concurrent.TimeUnit;
 import java.util.stream.Collectors;
 
 /**
@@ -102,6 +103,8 @@ public class SysUserFacade extends SysUserServiceImpl {
     private SysHospitalSetFacade sysHospitalSetFacade;
     @Autowired
     private RedisUtils redisUtils;
+    @Autowired
+    private LockTask lockTask;
 
 
     public void getCaptcha(HttpServletRequest request, HttpServletResponse response) throws IOException {
@@ -200,7 +203,7 @@ public class SysUserFacade extends SysUserServiceImpl {
 
 
         //判断用户是否锁定
-        if(lockFlag){
+        if (lockFlag) {
             lockCheck(redisUtils, user);
         }
         //密码是否正确
@@ -288,7 +291,7 @@ public class SysUserFacade extends SysUserServiceImpl {
                 //锁定账号
                 lockUser(user.getId(), LockEnum.LOCK.getKey());
                 //启动定时任务解锁
-                runTimerTask(user.getId(), LockEnum.UNLOCK.getKey(), unlockTime * 1000);
+                runTimerTask(user.getId(), LockEnum.UNLOCK.getKey(), unlockTime);
                 //redis存入解锁账号(用户解锁剩余时间)
                 redisUtils.set("user:lockTime_" + user.getId(), "lock", unlockTime);
                 //获取锁定时间
@@ -343,7 +346,7 @@ public class SysUserFacade extends SysUserServiceImpl {
     }
 
     private void runTimerTask(Long id, String lock, int time) {
-        new Timer().schedule(new TimerTask() {
+        lockTask.getMScheduledExecutorService().schedule(new Runnable() {
             @Override
             public void run() {
                 try {
@@ -352,7 +355,7 @@ public class SysUserFacade extends SysUserServiceImpl {
                     e.printStackTrace();
                 }
             }
-        }, time);
+        }, time, TimeUnit.SECONDS);
     }
 
     public boolean lockUser(Long id, String key) {

+ 19 - 0
src/main/java/com/diagbot/task/LockTask.java

@@ -0,0 +1,19 @@
+package com.diagbot.task;
+
+import lombok.Data;
+import org.springframework.stereotype.Component;
+
+import java.util.concurrent.Executors;
+import java.util.concurrent.ScheduledExecutorService;
+
+/**
+ * @Description:
+ * @Author songxl
+ * @Date 2021/11/24
+ */
+@Component
+@Data
+public class LockTask {
+    //定时执行线程池
+    private ScheduledExecutorService mScheduledExecutorService = Executors.newScheduledThreadPool(10);
+}