diff --git a/LaunchServer/src/main/java/ru/gravit/launchserver/websocket/NettyIpForwardHandler.java b/LaunchServer/src/main/java/ru/gravit/launchserver/websocket/NettyIpForwardHandler.java index 2393cc80..1adc5087 100644 --- a/LaunchServer/src/main/java/ru/gravit/launchserver/websocket/NettyIpForwardHandler.java +++ b/LaunchServer/src/main/java/ru/gravit/launchserver/websocket/NettyIpForwardHandler.java @@ -1,6 +1,7 @@ package ru.gravit.launchserver.websocket; import io.netty.channel.ChannelHandlerContext; +import io.netty.handler.codec.MessageToMessageCodec; import io.netty.handler.codec.MessageToMessageDecoder; import io.netty.handler.codec.http.HttpHeaders; import io.netty.handler.codec.http.HttpRequest; @@ -8,7 +9,7 @@ import java.util.List; -public class NettyIpForwardHandler extends MessageToMessageDecoder { +public class NettyIpForwardHandler extends MessageToMessageCodec { private NettyConnectContext context; public NettyIpForwardHandler(NettyConnectContext context) { @@ -16,6 +17,27 @@ public NettyIpForwardHandler(NettyConnectContext context) { this.context = context; } + @Override + protected void encode(ChannelHandlerContext ctx, HttpRequest msg, List out) throws Exception { + if (context.ip != null) { + out.add(msg); + return; + } + HttpHeaders headers = msg.headers(); + String realIP = null; + if (headers.contains("X-Forwarded-For")) { + realIP = headers.get("X-Forwarded-For"); + } + if (headers.contains("X-Real-IP")) { + realIP = headers.get("X-Real-IP"); + } + if (realIP != null) { + LogHelper.dev("Real IP address %s", realIP); + context.ip = realIP; + } else LogHelper.error("IpForwarding error. Headers not found"); + out.add(msg); + } + @Override protected void decode(ChannelHandlerContext ctx, HttpRequest msg, List out) throws Exception { if (context.ip != null) {