From d752b3d9ccac0e1416e74a2cabd6f6e374d42b2e Mon Sep 17 00:00:00 2001 From: ZhengJie <201507802@qq.com> Date: Sun, 22 Nov 2020 20:14:13 +0800 Subject: [PATCH] =?UTF-8?q?[=E4=BB=A3=E7=A0=81=E4=BC=98=E5=8C=96](v2.6)?= =?UTF-8?q?=EF=BC=9A=E4=BF=AE=E5=A4=8D=E6=9C=8D=E5=8A=A1=E7=9B=91=E6=8E=A7?= =?UTF-8?q?=E7=A3=81=E7=9B=98=E7=BB=9F=E8=AE=A1=E4=B8=8D=E5=87=86=E7=A1=AE?= =?UTF-8?q?=E7=9A=84=E9=97=AE=E9=A2=98=EF=BC=8C=E4=BF=AE=E5=A4=8D=E6=9C=AC?= =?UTF-8?q?=E6=9C=BAIP=E8=8E=B7=E5=8F=96=E4=B8=8D=E5=87=86=E7=A1=AE?= =?UTF-8?q?=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit close https://github.com/elunez/eladmin/issues/527 --- .../java/me/zhengjie/utils/StringUtils.java | 44 ++++++++++++++----- ...yConfig.java => SpringSecurityConfig.java} | 11 +++-- .../service/impl/MonitorServiceImpl.java | 24 +++++++--- 3 files changed, 54 insertions(+), 25 deletions(-) rename eladmin-system/src/main/java/me/zhengjie/modules/security/config/{SecurityConfig.java => SpringSecurityConfig.java} (99%) diff --git a/eladmin-common/src/main/java/me/zhengjie/utils/StringUtils.java b/eladmin-common/src/main/java/me/zhengjie/utils/StringUtils.java index f0f31003..d51d4aef 100644 --- a/eladmin-common/src/main/java/me/zhengjie/utils/StringUtils.java +++ b/eladmin-common/src/main/java/me/zhengjie/utils/StringUtils.java @@ -29,10 +29,13 @@ import org.springframework.core.io.ClassPathResource; import javax.servlet.http.HttpServletRequest; import java.io.File; +import java.net.Inet4Address; import java.net.InetAddress; +import java.net.NetworkInterface; import java.net.UnknownHostException; import java.util.Calendar; import java.util.Date; +import java.util.Enumeration; /** * @author Zheng Jie @@ -248,20 +251,37 @@ public class StringUtils extends org.apache.commons.lang3.StringUtils { * @return / */ public static String getLocalIp() { - InetAddress addr; try { - addr = InetAddress.getLocalHost(); - } catch (UnknownHostException e) { - return "unknown"; - } - byte[] ipAddr = addr.getAddress(); - StringBuilder ipAddrStr = new StringBuilder(); - for (int i = 0; i < ipAddr.length; i++) { - if (i > 0) { - ipAddrStr.append("."); + InetAddress candidateAddress = null; + // 遍历所有的网络接口 + for (Enumeration interfaces = NetworkInterface.getNetworkInterfaces(); interfaces.hasMoreElements();) { + NetworkInterface anInterface = interfaces.nextElement(); + // 在所有的接口下再遍历IP + for (Enumeration inetAddresses = anInterface.getInetAddresses(); inetAddresses.hasMoreElements();) { + InetAddress inetAddr = inetAddresses.nextElement(); + // 排除loopback类型地址 + if (!inetAddr.isLoopbackAddress()) { + if (inetAddr.isSiteLocalAddress()) { + // 如果是site-local地址,就是它了 + return inetAddr.getHostAddress(); + } else if (candidateAddress == null) { + // site-local类型的地址未被发现,先记录候选地址 + candidateAddress = inetAddr; + } + } + } } - ipAddrStr.append(ipAddr[i] & 0xFF); + if (candidateAddress != null) { + return candidateAddress.getHostAddress(); + } + // 如果没有发现 non-loopback地址.只能用最次选的方案 + InetAddress jdkSuppliedAddress = InetAddress.getLocalHost(); + if (jdkSuppliedAddress == null) { + return ""; + } + return jdkSuppliedAddress.getHostAddress(); + } catch (Exception e) { + return ""; } - return ipAddrStr.toString(); } } diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/security/config/SecurityConfig.java b/eladmin-system/src/main/java/me/zhengjie/modules/security/config/SpringSecurityConfig.java similarity index 99% rename from eladmin-system/src/main/java/me/zhengjie/modules/security/config/SecurityConfig.java rename to eladmin-system/src/main/java/me/zhengjie/modules/security/config/SpringSecurityConfig.java index 2d2592b5..104c9dcf 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/security/config/SecurityConfig.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/security/config/SpringSecurityConfig.java @@ -40,7 +40,6 @@ import org.springframework.web.filter.CorsFilter; import org.springframework.web.method.HandlerMethod; import org.springframework.web.servlet.mvc.method.RequestMappingInfo; import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping; - import java.util.*; /** @@ -50,7 +49,7 @@ import java.util.*; @EnableWebSecurity @RequiredArgsConstructor @EnableGlobalMethodSecurity(prePostEnabled = true, securedEnabled = true) -public class SecurityConfig extends WebSecurityConfigurerAdapter { +public class SpringSecurityConfig extends WebSecurityConfigurerAdapter { private final TokenProvider tokenProvider; private final CorsFilter corsFilter; @@ -138,6 +137,10 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter { .and().apply(securityConfigurerAdapter()); } + private TokenConfigurer securityConfigurerAdapter() { + return new TokenConfigurer(tokenProvider, properties, onlineUserService, userCacheClean); + } + private Map> getAnonymousUrl(Map handlerMethodMap) { Map> anonymousUrls = new HashMap<>(6); Set get = new HashSet<>(); @@ -182,8 +185,4 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter { anonymousUrls.put(RequestMethodEnum.ALL.getType(), all); return anonymousUrls; } - - private TokenConfigurer securityConfigurerAdapter() { - return new TokenConfigurer(tokenProvider, properties, onlineUserService, userCacheClean); - } } diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/MonitorServiceImpl.java b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/MonitorServiceImpl.java index 99aaef88..2b94a032 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/MonitorServiceImpl.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/MonitorServiceImpl.java @@ -18,6 +18,7 @@ package me.zhengjie.modules.system.service.impl; import cn.hutool.core.date.BetweenFormater; import cn.hutool.core.date.DateUtil; import me.zhengjie.modules.system.service.MonitorService; +import me.zhengjie.utils.ElAdminConstant; import me.zhengjie.utils.FileUtil; import me.zhengjie.utils.StringUtils; import org.springframework.stereotype.Service; @@ -73,15 +74,24 @@ public class MonitorServiceImpl implements MonitorService { Map diskInfo = new LinkedHashMap<>(); FileSystem fileSystem = os.getFileSystem(); List fsArray = fileSystem.getFileStores(); + String osName = System.getProperty("os.name"); + long available = 0, total = 0; for (OSFileStore fs : fsArray){ - long available = fs.getUsableSpace(); - long total = fs.getTotalSpace(); - long used = total - available; - diskInfo.put("total", total > 0 ? FileUtil.getSize(total) : "?"); - diskInfo.put("available", FileUtil.getSize(available)); - diskInfo.put("used", FileUtil.getSize(used)); - diskInfo.put("usageRate", df.format(used/(double)fs.getTotalSpace() * 100)); + // windows 需要将所有磁盘分区累加 + if(osName.toLowerCase().startsWith(ElAdminConstant.WIN)) { + available += fs.getUsableSpace(); + total += fs.getTotalSpace(); + } else { + available = fs.getUsableSpace(); + total = fs.getTotalSpace(); + break; + } } + long used = total - available; + diskInfo.put("total", total > 0 ? FileUtil.getSize(total) : "?"); + diskInfo.put("available", FileUtil.getSize(available)); + diskInfo.put("used", FileUtil.getSize(used)); + diskInfo.put("usageRate", df.format(used/(double)total * 100)); return diskInfo; }