소스 검색

Websocket获取客户端ip代码提交

jingyuanchao 1 년 전
부모
커밋
96ffc46386

+ 8 - 4
soc-modules/soc-modules-mediator/src/main/java/com/xunmei/mediator/websocket/handler/SocWebSocketHandler.java

@@ -18,6 +18,7 @@ import com.xunmei.mediator.websocket.service.RouterService;
 import com.xunmei.mediator.websocket.service.RouterServiceHandler;
 import com.xunmei.mediator.websocket.utils.WebSocketUtils;
 import com.xunmei.system.api.util.LogUtils;
+import io.netty.util.internal.StringUtil;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
@@ -25,12 +26,11 @@ import org.springframework.web.socket.*;
 import org.springframework.web.socket.handler.AbstractWebSocketHandler;
 
 import java.io.IOException;
-import java.net.InetSocketAddress;
 import java.time.LocalDateTime;
 import java.util.Date;
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
-import java.util.Optional;
 
 /**
  * @author gaoxiong
@@ -75,9 +75,13 @@ public class SocWebSocketHandler extends AbstractWebSocketHandler {
 
         String token = (String) session.getAttributes().get("token");
         if (StringUtils.isNotEmpty(token)) {
+            String ip = StringUtil.EMPTY_STRING;
+            final List<String> list = session.getHandshakeHeaders().get("x-forwarded-for");
+            if (ObjectUtil.isNotEmpty(list)) {
+                ip = list.get(0);
+            }
             IotServerInfo serverInfo = iotServerInfoService.selectByToken(token);
-            InetSocketAddress remoteAddress = session.getRemoteAddress();
-            Optional.ofNullable(remoteAddress).ifPresent(address -> serverInfo.setIotIp(address.getAddress().getHostAddress()));
+            serverInfo.setIotIp(ip);
             serverInfo.setRegisterCodeStatus(1);
             serverInfo.setLastConnectTime(LocalDateTime.now());
             serverInfo.setIotStatus(IotServerConnectStatus.CONNECTED.getIdx());

+ 1 - 0
soc-modules/soc-modules-mediator/src/main/java/com/xunmei/mediator/websocket/utils/IotServerUtils.java

@@ -24,6 +24,7 @@ public class IotServerUtils {
         websocketResult.setId(UUID.randomUUID().toString());
         websocketResult.setTimestamp(new Date());
         websocketResult.setTopic(topic);
+        websocketResult.setHeaders(new JSONObject());
         HashMap<String, Object> hashMap = new HashMap<>();
         hashMap.put(WebSocketConstants.SERVICE, service);
         hashMap.put(WebSocketConstants.ARGS, args);