From 10c1709404f981f4fb87185078fcee616346f5ce Mon Sep 17 00:00:00 2001
From: 13693261870 <252740454@qq.com>
Date: 星期一, 17 十月 2022 14:27:22 +0800
Subject: [PATCH] 1

---
 src/main/java/com/lf/server/service/sys/TokenService.java      |   42 +++++++++++--
 src/main/java/com/lf/server/service/sys/UserService.java       |   56 ++++++++++--------
 src/main/java/com/lf/server/controller/all/SignController.java |   24 ++-----
 src/main/java/com/lf/server/helper/WebHelper.java              |    4 
 src/main/java/com/lf/server/interceptor/AuthInterceptor.java   |    6 +-
 src/main/java/com/lf/server/service/sys/LoginService.java      |   11 ++-
 6 files changed, 86 insertions(+), 57 deletions(-)

diff --git a/src/main/java/com/lf/server/controller/all/SignController.java b/src/main/java/com/lf/server/controller/all/SignController.java
index 60106ae..8099c6d 100644
--- a/src/main/java/com/lf/server/controller/all/SignController.java
+++ b/src/main/java/com/lf/server/controller/all/SignController.java
@@ -121,27 +121,19 @@
     @PostMapping(value = "/login", produces = "application/json; charset=UTF-8")
     public ResponseMsg<TokenEntity> login(@RequestBody UserEntity user, HttpServletRequest req, HttpServletResponse res) {
         try {
-            if (user == null) {
-                return fail("璇疯緭鍏ョ敤鎴峰悕鍜屽瘑鐮侊紒", null);
-            }
-            if (StringHelper.isEmpty(user.getUid())) {
-                return fail("鐢ㄦ埛鍚嶄笉鑳戒负绌猴紒", null);
-            }
-            if (StringHelper.isEmpty(user.getPwd())) {
-                return fail("瀵嗙爜涓嶈兘涓虹┖锛�", null);
+            String str = userService.validateNewPwd(user);
+            if (str != null) {
+                return fail(str, null);
             }
 
-            // 瑙e瘑
-            String uid = RsaHelper.decrypt(user.getUid());
-            String pwd = RsaHelper.decrypt(user.getPwd());
-
-            UserEntity ue = userService.selectByUid(uid);
+            UserEntity ue = userService.selectByUid(user.getUid());
             if (ue == null) {
                 return fail("鐢ㄦ埛鍚嶄笉瀛樺湪锛�", null);
             }
 
-            LoginEntity le = loginService.getNewLogin(ue.getId(), 1, req);
-            if (!Md5Helper.validatePassword(pwd, ue.getPwd())) {
+            LoginEntity le = loginService.getNewLogin(ue.getId(), 1, 1, 1, req);
+            if (!Md5Helper.validatePassword(user.getPwd(), ue.getPwd())) {
+                tokenService.setPwdErrCache(ue);
                 le.setStatus(0);
                 le.setDescr("瀵嗙爜閿欒");
                 loginService.insertLogin(le);
@@ -194,7 +186,7 @@
             if (flag) {
                 // 鍐欐棩蹇�
                 UserEntity ue = tokenService.getCurrentUser(req);
-                LoginEntity le = loginService.getNewLogin(ue.getId(), 2, req);
+                LoginEntity le = loginService.getNewLogin(ue.getId(), 1, 2, 1, req);
                 Integer rows = loginService.insertLogin(le);
             }
 
diff --git a/src/main/java/com/lf/server/helper/WebHelper.java b/src/main/java/com/lf/server/helper/WebHelper.java
index 53db6b9..d3d5922 100644
--- a/src/main/java/com/lf/server/helper/WebHelper.java
+++ b/src/main/java/com/lf/server/helper/WebHelper.java
@@ -132,7 +132,7 @@
      */
     public static void saveToken2Cookie(String token, HttpServletRequest request, HttpServletResponse response) {
         // 鍏堝垹闄�
-        deleteAll(request, response);
+        deleteCookies(request, response);
 
         // 鍐嶄繚瀛�
         saveCookie(StaticData.TOKEN_COOKIE_KEY, token, response);
@@ -182,7 +182,7 @@
      * @param request
      * @param response
      */
-    public static void deleteAll(HttpServletRequest request, HttpServletResponse response) {
+    public static void deleteCookies(HttpServletRequest request, HttpServletResponse response) {
         Cookie[] cookies = request.getCookies();
         if (cookies != null && cookies.length > 0) {
             for (Cookie c : cookies) {
diff --git a/src/main/java/com/lf/server/interceptor/AuthInterceptor.java b/src/main/java/com/lf/server/interceptor/AuthInterceptor.java
index 30e9a57..dac54cc 100644
--- a/src/main/java/com/lf/server/interceptor/AuthInterceptor.java
+++ b/src/main/java/com/lf/server/interceptor/AuthInterceptor.java
@@ -62,9 +62,9 @@
                 return WebHelper.write2Page(response, NO_LOGIN);
             }
 
-            Object objCount = tokenService.redisService.get(RedisCacheKey.signPwdError(ue.getUid()));
-            if (objCount != null && (int) objCount > SettingData.PWD_ERR_COUNT) {
-                return WebHelper.write2Page(response, JSON.toJSONString(new ResponseMsg<String>(HttpStatus.NO_LOGIN_ERROR, SettingData.PWD_ERR_TIME + "鍒嗛挓鍐呯姝㈢櫥褰�")));
+            if (tokenService.isUidDisable(ue)) {
+                tokenService.logout(token, request, response);
+                return WebHelper.write2Page(response, JSON.toJSONString(new ResponseMsg<String>(HttpStatus.USER_LOCK_ERROR, SettingData.PWD_ERR_TIME + "鍒嗛挓鍐呯姝㈢櫥褰�")));
             }
 
             // noinspection AlibabaRemoveCommentedCode
diff --git a/src/main/java/com/lf/server/service/sys/LoginService.java b/src/main/java/com/lf/server/service/sys/LoginService.java
index b010fb1..6a5b8e1 100644
--- a/src/main/java/com/lf/server/service/sys/LoginService.java
+++ b/src/main/java/com/lf/server/service/sys/LoginService.java
@@ -70,13 +70,16 @@
         return loginMapper.selectLoginAll();
     }
 
-    public LoginEntity getNewLogin(int userid, int type, HttpServletRequest req) {
+    /**
+     * 鑾峰彇鏂扮殑鐧诲綍瀹炰綋绫�
+     */
+    public LoginEntity getNewLogin(int userid, int appId, int type, int status, HttpServletRequest req) {
         LoginEntity le = new LoginEntity();
-        le.setAppid(1);
+        le.setUserid(userid);
+        le.setAppid(appId);
         le.setIp(WebHelper.getIpAddress(req));
         le.setType(type);
-        le.setStatus(1);
-        le.setUserid(userid);
+        le.setStatus(status);
         le.setOptime(WebHelper.getCurrentTimestamp());
 
         return le;
diff --git a/src/main/java/com/lf/server/service/sys/TokenService.java b/src/main/java/com/lf/server/service/sys/TokenService.java
index 39c169d..89cbc2a 100644
--- a/src/main/java/com/lf/server/service/sys/TokenService.java
+++ b/src/main/java/com/lf/server/service/sys/TokenService.java
@@ -142,8 +142,8 @@
             return false;
         }
 
-        // 娓呴櫎Cookie WebHelper.saveCookie(StaticData.TOKEN_COOKIE_KEY, "", 60, res)
-        WebHelper.deleteAll(req, res);
+        // 娓呴櫎Cookie
+        WebHelper.deleteCookies(req, res);
 
         // 鑾峰彇褰撳墠鐢ㄦ埛
         UserEntity ue = getCurrentUser(req);
@@ -153,9 +153,13 @@
 
         // 娓呴櫎缂撳瓨
         String tokenKey = RedisCacheKey.signTokenKey(token);
-        redisService.delete(tokenKey);
+        if (redisService.hasKey(tokenKey)) {
+            redisService.delete(tokenKey);
+        }
         String userKey = RedisCacheKey.signUserKey(te.getToken());
-        redisService.delete(userKey);
+        if (redisService.hasKey(userKey)) {
+            redisService.delete(userKey);
+        }
 
         // db锛岃缃护鐗岃繃鏈�
         te.setUpdateUser(ue.getId());
@@ -165,7 +169,7 @@
         }
 
         // 鍐欐棩蹇�
-        LoginEntity le = loginService.getNewLogin(ue.getId(), 3, req);
+        LoginEntity le = loginService.getNewLogin(ue.getId(), 1, 3, 1, req);
         rows = loginService.insertLogin(le);
 
         return rows > 0;
@@ -214,9 +218,6 @@
 
     /**
      * 鑾峰彇褰撳墠鐢ㄦ埛
-     *
-     * @param req
-     * @return
      */
     public UserEntity getCurrentUser(HttpServletRequest req) {
         String token = WebHelper.getToken(req);
@@ -243,4 +244,29 @@
 
         return ue;
     }
+
+    /**
+     * 璁剧疆瀵嗙爜閿欒缂撳瓨
+     */
+    public void setPwdErrCache(UserEntity ue) {
+        String key = RedisCacheKey.signPwdError(ue.getUid());
+        Object objCount = redisService.get(key);
+
+        int count = objCount == null ? 1 : (int) objCount + 1;
+        redisService.put(key, count, SettingData.PWD_ERR_TIME, TimeUnit.MINUTES);
+    }
+
+    /**
+     * 鐢ㄦ埛ID鏄�/鍚︾鐢�
+     */
+    public boolean isUidDisable(UserEntity ue) {
+        String key = RedisCacheKey.signPwdError(ue.getUid());
+        Object objCount = redisService.get(key);
+
+        return objCount != null && (int) objCount >= SettingData.PWD_ERR_COUNT;
+    }
+
+    public void logoffToken(String token) {
+        //
+    }
 }
diff --git a/src/main/java/com/lf/server/service/sys/UserService.java b/src/main/java/com/lf/server/service/sys/UserService.java
index 51eba3c..8d49085 100644
--- a/src/main/java/com/lf/server/service/sys/UserService.java
+++ b/src/main/java/com/lf/server/service/sys/UserService.java
@@ -108,17 +108,34 @@
     }
 
     /**
-     * 楠岃瘉鏂扮敤鎴峰瘑鐮�
+     * 楠岃瘉鐢ㄦ埛瀹炰綋绫�
      */
-    public String validateNewPwd(UserEntity entity) {
+    public String validateUserEntity(UserEntity entity) {
         if (entity == null) {
             return "娌℃湁鎵惧埌鐢ㄦ埛";
         }
+        if (StringHelper.isEmpty(entity.getUid())) {
+            return "鐢ㄦ埛ID涓嶈兘涓虹┖";
+        }
         if (StringHelper.isEmpty(entity.getPwd())) {
-            return "瀵嗙爜涓嶈兘涓虹┖";
+            return "鐢ㄦ埛瀵嗙爜涓嶈兘涓虹┖";
         }
 
+        return null;
+    }
+
+    /**
+     * 楠岃瘉鏂扮敤鎴峰瘑鐮�
+     */
+    public String validateNewPwd(UserEntity entity) {
         try {
+            String str = validateUserEntity(entity);
+            if (str != null) {
+                return str;
+            }
+
+            // 瑙e瘑
+            String uid = RsaHelper.decrypt(entity.getUid());
             String pwd = RsaHelper.decrypt(entity.getPwd());
             if (!StringHelper.checkPwdValid(pwd)) {
                 return "瀵嗙爜涓嶇鍚堣姹�";
@@ -126,6 +143,7 @@
 
             String newPwd = Md5Helper.reverse(Md5Helper.generate(pwd));
             entity.setPwd(newPwd);
+            entity.setUid(uid);
 
             return null;
         } catch (Exception ex) {
@@ -137,18 +155,20 @@
      * 楠岃瘉鑰佺敤鎴峰瘑鐮�
      */
     public String validateOldPwd(UserEntity entity) {
-        if (entity == null) {
-            return "娌℃湁鎵惧埌鐢ㄦ埛";
-        }
-        if (StringHelper.isEmpty(entity.getPwd())) {
-            return "鐢ㄦ埛瀵嗙爜涓嶈兘涓虹┖";
-        }
-
         try {
+            String str = validateUserEntity(entity);
+            if (str != null) {
+                return str;
+            }
+            if (StringHelper.isEmpty(entity.getSalt())) {
+                return "鏂板瘑鐮佷笉鑳戒负绌�";
+            }
+
+            String uid = RsaHelper.decrypt(entity.getUid());
             String pwd = RsaHelper.decrypt(entity.getPwd());
             String salt = RsaHelper.decrypt(entity.getSalt());
 
-            UserEntity ue = selectUser(entity.getId());
+            UserEntity ue = selectByUid(uid);
             if (ue == null) {
                 return "娌℃湁鎵惧埌鐢ㄦ埛";
             }
@@ -163,6 +183,7 @@
             String newPwd = Md5Helper.reverse(Md5Helper.generate(salt));
             entity.setPwd(newPwd);
             entity.setSalt(null);
+            entity.setUid(uid);
 
             return null;
         } catch (Exception ex) {
@@ -214,18 +235,5 @@
         } catch (Exception ex) {
             return "瀵嗙爜瑙e瘑澶辫触";
         }
-    }
-
-    /**
-     * 璁剧疆瀵嗙爜閿欒缂撳瓨
-     *
-     * @param ue
-     */
-    public void setPwdErrCache(UserEntity ue) {
-        String key = RedisCacheKey.signPwdError(ue.getUid());
-        Object objCount = redisService.get(key);
-
-        int count = objCount == null ? 1 : (int) objCount + 1;
-        redisService.put(key, count, SettingData.PWD_ERR_TIME, TimeUnit.MINUTES);
     }
 }

--
Gitblit v1.9.3