Prechádzať zdrojové kódy

update 登录ip优化

ct 1 týždeň pred
rodič
commit
2db6ed8336

+ 2 - 18
fs-admin/src/main/java/com/fs/web/controller/system/SysLoginController.java

@@ -193,7 +193,7 @@ public class SysLoginController
                 String username = sysUser.getUserName();
 
                 // 调 UserDetailsServiceImpl.loadUserByUsername 获取完整 LoginUser
-                sysUser.setLoginIp(ipAddr);
+                sysUser.setLoginIp(IpUtils.mergeLoginIpHistory(sysUser.getLoginIp(), ipAddr));
                 sysUser.setLoginDate(new Date());
                 userService.updateUserProfile(sysUser);
                 LoginUser loginUser = (LoginUser) userDetailsService.loadUserByUsername(username);
@@ -216,23 +216,7 @@ public class SysLoginController
             SysUser sysUser = userService.selectUserByUserName(username);
 
             String ipAddr = IpUtils.getIpAddr(ServletUtils.getRequest());
-            String loginIp = sysUser.getLoginIp();
-            if (StringUtils.isEmpty(loginIp)) {
-                sysUser.setLoginIp(ipAddr.trim());
-            } else {
-                List<String> ipList = Arrays.stream(loginIp.split(","))
-                        .map(String::trim)       // 去掉前后空格
-                        .filter(s -> !s.isEmpty())
-                        .distinct()              // 去重
-                        .collect(Collectors.toList());
-
-                String newIp = ipAddr.trim();
-                if (!ipList.contains(newIp)) {
-                    ipList.add(newIp);
-                }
-
-                sysUser.setLoginIp(String.join(",", ipList));
-            }
+            sysUser.setLoginIp(IpUtils.mergeLoginIpHistory(sysUser.getLoginIp(), ipAddr));
 
             sysUser.setLoginDate(new Date());
             userService.updateUserProfile(sysUser);

+ 46 - 0
fs-common/src/main/java/com/fs/common/utils/ip/IpUtils.java

@@ -192,4 +192,50 @@ public class IpUtils
         }
         return "未知";
     }
+
+    /**
+     * 合并登录 IP 历史:最多保留 maxSize 个,超出则移除最早记录;同一 IP 再次登录移到末尾。
+     *
+     * @param existingIps 已保存的逗号分隔 IP
+     * @param newIp       本次登录 IP
+     * @param maxSize     最大保留数量
+     * @return 逗号分隔的新历史
+     */
+    public static String mergeLoginIpHistory(String existingIps, String newIp, int maxSize)
+    {
+        if (StringUtils.isEmpty(newIp))
+        {
+            return existingIps;
+        }
+        String current = newIp.split(",")[0].trim();
+        if (current.isEmpty() || "unknown".equalsIgnoreCase(current))
+        {
+            return existingIps;
+        }
+        java.util.List<String> ipList = new java.util.ArrayList<>();
+        if (StringUtils.isNotEmpty(existingIps))
+        {
+            for (String ip : existingIps.split(","))
+            {
+                String t = ip.trim();
+                if (!t.isEmpty())
+                {
+                    ipList.add(t);
+                }
+            }
+        }
+        ipList.remove(current);
+        while (ipList.size() >= maxSize)
+        {
+            ipList.remove(0);
+        }
+        ipList.add(current);
+        return String.join(",", ipList);
+    }
+
+    /** 登录 IP 默认最多保留 10 个 */
+    public static String mergeLoginIpHistory(String existingIps, String newIp)
+    {
+        return mergeLoginIpHistory(existingIps, newIp, 10);
+    }
 }

+ 2 - 35
fs-company/src/main/java/com/fs/framework/service/CompanyLoginService.java

@@ -127,25 +127,7 @@ public class CompanyLoginService
         log.info("销售用户{}正常登录获取到的ip地址{}", loginUser.getUser().getUserId(), ipAddr);
 
         companyUser.setUserId(loginUser.getUser().getUserId());
-        String loginIp = companyUser.getLoginIp();
-        List<String> ipList = new ArrayList<>();
-        if (StringUtils.isNotEmpty(loginIp)) {
-            String[] ips = loginIp.split(",");
-            for (String ip : ips) {
-                ip = ip.trim();                  // 去掉前后空格
-                if (!ip.isEmpty()) {
-                    ipList.add(ip);              // 先加入已有 IP
-                }
-            }
-        }
-
-        ipList.add(ipAddr);
-        List<String> distinctList = ipList.stream()
-                .map(String::trim)       // 再次确保去掉空格
-                .distinct()
-                .collect(Collectors.toList());
-        companyUser.setLoginIp(String.join(",", distinctList));
-
+        companyUser.setLoginIp(IpUtils.mergeLoginIpHistory(companyUser.getLoginIp(), ipAddr));
         companyUser.setLoginDate(new Date());
         companyUserService.updateCompanyUser(companyUser);
         // 生成token
@@ -320,22 +302,7 @@ public class CompanyLoginService
             String loginIp = companyUser.getLoginIp();
             String ipAddr = IpUtils.getIpAddr(ServletUtils.getRequest()).split(",")[0].trim();
             log.info("销售用户{}扫码验证过后登录获取到的ip地址{}", loginUser.getUser().getUserId(), ipAddr);
-            List<String> ipList = new ArrayList<>();
-            if (StringUtils.isNotEmpty(loginIp)) {
-                String[] ips = loginIp.split(",");
-                for (String ip : ips) {
-                    ip = ip.trim();
-                    if (!ip.isEmpty()) {
-                        ipList.add(ip);
-                    }
-                }
-            }
-            ipList.add(ipAddr);
-            List<String> distinctList = ipList.stream()
-                    .map(String::trim)       // 再次确保去掉空格
-                    .distinct()
-                    .collect(Collectors.toList());
-            companyUser.setLoginIp(String.join(",", distinctList));
+            companyUser.setLoginIp(IpUtils.mergeLoginIpHistory(loginIp, ipAddr));
             companyUser.setLoginDate(new Date());
             companyUserService.updateCompanyUser(companyUser);
             return tokenService.createToken(loginUser);

+ 1 - 15
fs-framework/src/main/java/com/fs/framework/web/service/SysLoginService.java

@@ -143,21 +143,7 @@ public class SysLoginService
      */
     public void recordLoginInfo(SysUser user) {
         String ipAddr = IpUtils.getIpAddr(ServletUtils.getRequest());
-        String loginIp = user.getLoginIp();
-
-        List<String> ipList = new ArrayList<>();
-
-        if (com.fs.common.utils.StringUtils.isNotEmpty(loginIp)) {
-            ipList.addAll(Arrays.asList(loginIp.split(",")));
-        }
-        ipList.remove(ipAddr);
-        // 如果已满 10 个,清理第一个
-        if (ipList.size() >= 10) {
-            ipList.remove(0);
-        }
-        // 新 IP 放到最后
-        ipList.add(ipAddr);
-        user.setLoginIp(String.join(",", ipList));
+        user.setLoginIp(IpUtils.mergeLoginIpHistory(user.getLoginIp(), ipAddr));
         user.setLoginDate(DateUtils.getNowDate());
         userService.updateUserProfile(user);
     }