From 11947dec914892ffda246b5d300d9a55d9477cfa Mon Sep 17 00:00:00 2001 From: hongqiaowei Date: Tue, 28 Sep 2021 13:39:57 +0800 Subject: [PATCH] Gateway group support server that have multi ip address --- .../src/main/java/we/util/NetworkUtils.java | 57 +++++++++++-------- .../we/plugin/auth/GatewayGroupService.java | 6 +- 2 files changed, 38 insertions(+), 25 deletions(-) diff --git a/fizz-common/src/main/java/we/util/NetworkUtils.java b/fizz-common/src/main/java/we/util/NetworkUtils.java index eab90a5..d7931eb 100644 --- a/fizz-common/src/main/java/we/util/NetworkUtils.java +++ b/fizz-common/src/main/java/we/util/NetworkUtils.java @@ -27,6 +27,9 @@ import java.net.SocketException; import java.net.UnknownHostException; import java.security.SecureRandom; import java.util.Enumeration; +import java.util.LinkedHashSet; +import java.util.Optional; +import java.util.Set; /** * @author hongqiaowei @@ -36,49 +39,57 @@ public class NetworkUtils { private static final Logger log = LoggerFactory.getLogger(NetworkUtils.class); - private static final int maxServerId = 1023; + private static final int maxServerId = 1023; - private static int serverId = -1; + private static int serverId = -1; - private static String serverIp; + private static String serverIp; - private static final String SERVER_IP = "SERVER_IP"; + private static Set serverIps = new LinkedHashSet<>(); + private static final String SERVER_IP = "SERVER_IP"; + + /** + * @return user settings, or the first one in ip address list. + */ public static String getServerIp() { + if (serverIp == null) { + serverIp = getServerIps().iterator().next(); + } + return serverIp; + } + + public static Set getServerIps() { try { - if (serverIp == null) { - serverIp = System.getProperty(SERVER_IP); - log.info("JVM env SERVER_IP is " + serverIp); - if (StringUtils.isBlank(serverIp)) { - serverIp = System.getenv(SERVER_IP); - log.info("System env SERVER_IP is " + serverIp); + if (serverIps.isEmpty()) { + String ip = System.getProperty(SERVER_IP); + if (StringUtils.isBlank(ip)) { + ip = System.getenv(SERVER_IP); } - if (StringUtils.isBlank(serverIp)) { - boolean found = false; - Enumeration nis = null; - nis = NetworkInterface.getNetworkInterfaces(); + if (StringUtils.isBlank(ip)) { + Enumeration nis = NetworkInterface.getNetworkInterfaces(); while (nis.hasMoreElements()) { NetworkInterface ni = (NetworkInterface) nis.nextElement(); Enumeration ias = ni.getInetAddresses(); while (ias.hasMoreElements()) { InetAddress ia = ias.nextElement(); if (ia.isSiteLocalAddress()) { - serverIp = ia.getHostAddress(); - found = true; - break; + ip = ia.getHostAddress(); + serverIps.add(ip); } } - if (found) { - break; - } } - if (!found) { + if (serverIps.isEmpty()) { InetAddress ia = InetAddress.getLocalHost(); - serverIp = ia.getHostAddress(); + ip = ia.getHostAddress(); + serverIps.add(ip); } + } else { + serverIps.add(ip); } + log.info("server ip: {}", serverIps); } - return serverIp; + return serverIps; } catch (SocketException | UnknownHostException e) { throw new RuntimeException(e); } diff --git a/fizz-core/src/main/java/we/plugin/auth/GatewayGroupService.java b/fizz-core/src/main/java/we/plugin/auth/GatewayGroupService.java index c472d52..e9b0c2d 100644 --- a/fizz-core/src/main/java/we/plugin/auth/GatewayGroupService.java +++ b/fizz-core/src/main/java/we/plugin/auth/GatewayGroupService.java @@ -184,12 +184,14 @@ public class GatewayGroupService { private void updateCurrentGatewayGroupSet(Set currentGatewayGroupSet, Map gatewayGroupMap) { - String ip = NetworkUtils.getServerIp(); + Set ips = NetworkUtils.getServerIps(); String applicationName = environment.getProperty("spring.application.name"); currentGatewayGroupSet.clear(); gatewayGroupMap.forEach( (k, gg) -> { - if (gg.gateways.contains(ip) || gg.gateways.contains(applicationName)) { + Set set = new HashSet<>(ips); + set.retainAll(gg.gateways); + if (!set.isEmpty() || gg.gateways.contains(applicationName)) { currentGatewayGroupSet.add(gg.group); } }