From 7a4973bd35f6c8a296472dea42a63df40a3b68b8 Mon Sep 17 00:00:00 2001 From: zhourui Date: Wed, 14 Oct 2020 15:44:26 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=BB=A3=E7=90=86=E5=88=B0?= =?UTF-8?q?=E6=9C=AC=E5=9C=B0127,0,0,1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../x/server/console/server/web/Proxy.java | 86 +++++++++++++++++-- 1 file changed, 81 insertions(+), 5 deletions(-) diff --git a/o2server/x_console/src/main/java/com/x/server/console/server/web/Proxy.java b/o2server/x_console/src/main/java/com/x/server/console/server/web/Proxy.java index 461cc172c4..7170d99d1e 100644 --- a/o2server/x_console/src/main/java/com/x/server/console/server/web/Proxy.java +++ b/o2server/x_console/src/main/java/com/x/server/console/server/web/Proxy.java @@ -3,11 +3,14 @@ package com.x.server.console.server.web; import javax.servlet.http.HttpServletRequest; import org.apache.commons.lang3.StringUtils; +import org.eclipse.jetty.client.api.Request; +import org.eclipse.jetty.http.HttpHeader; import org.eclipse.jetty.proxy.AsyncProxyServlet; public class Proxy extends AsyncProxyServlet { private static final long serialVersionUID = 2737360000716631564L; + private static final String X_Real_IP = "X-Real-IP"; @Override protected String rewriteTarget(HttpServletRequest request) { @@ -17,19 +20,30 @@ public class Proxy extends AsyncProxyServlet { } private String target(String url, String parameter, String port) { - int x = StringUtils.indexOf(url, ":", 8); + int x = StringUtils.indexOf(url, "://"); int y = StringUtils.indexOf(url, "/", 8); if ((x > 0) && (y > 0)) { - return url.substring(0, x) + port(url, port) + url.substring(y) - + (StringUtils.isBlank(parameter) ? "" : "?" + parameter); - } else if (y > 0) { - return url.substring(0, y) + port(url, port) + url.substring(y) + return url.substring(0, x + 3) + "127.0.0.1" + port(url, port) + url.substring(y) + (StringUtils.isBlank(parameter) ? "" : "?" + parameter); } else { return null; } } +// private String target(String url, String parameter, String port) { +// int x = StringUtils.indexOf(url, ":", 8); +// int y = StringUtils.indexOf(url, "/", 8); +// if ((x > 0) && (y > 0)) { +// return url.substring(0, x) + port(url, port) + url.substring(y) +// + (StringUtils.isBlank(parameter) ? "" : "?" + parameter); +// } else if (y > 0) { +// return url.substring(0, y) + port(url, port) + url.substring(y) +// + (StringUtils.isBlank(parameter) ? "" : "?" + parameter); +// } else { +// return null; +// } +// } + private String port(String url, String port) { if (StringUtils.startsWithIgnoreCase(url, "https://") || StringUtils.startsWithIgnoreCase(url, "wss://")) { if (StringUtils.equals(port, "443")) { @@ -43,4 +57,66 @@ public class Proxy extends AsyncProxyServlet { return ":" + port; } + @Override + protected void addXForwardedHeaders(HttpServletRequest clientRequest, Request proxyRequest) { + if (StringUtils.isNotEmpty(clientRequest.getHeader(HttpHeader.X_FORWARDED_FOR.asString()))) { + proxyRequest.header(HttpHeader.X_FORWARDED_FOR, + clientRequest.getHeader(HttpHeader.X_FORWARDED_FOR.asString())); + } else { + proxyRequest.header(HttpHeader.X_FORWARDED_FOR, clientRequest.getRemoteAddr()); + } + if (StringUtils.isNotEmpty(clientRequest.getHeader(HttpHeader.X_FORWARDED_PROTO.asString()))) { + proxyRequest.header(HttpHeader.X_FORWARDED_PROTO, + clientRequest.getHeader(HttpHeader.X_FORWARDED_PROTO.asString())); + } else { + proxyRequest.header(HttpHeader.X_FORWARDED_PROTO, clientRequest.getScheme()); + } + if (StringUtils.isNotEmpty(clientRequest.getHeader(HttpHeader.X_FORWARDED_HOST.asString()))) { + proxyRequest.header(HttpHeader.X_FORWARDED_HOST, + clientRequest.getHeader(HttpHeader.X_FORWARDED_HOST.asString())); + } else { + proxyRequest.header(HttpHeader.X_FORWARDED_HOST, clientRequest.getHeader(HttpHeader.HOST.asString())); + } + if (StringUtils.isNotEmpty(clientRequest.getHeader(HttpHeader.X_FORWARDED_SERVER.asString()))) { + proxyRequest.header(HttpHeader.X_FORWARDED_SERVER, + clientRequest.getHeader(HttpHeader.X_FORWARDED_SERVER.asString())); + } else { + proxyRequest.header(HttpHeader.X_FORWARDED_SERVER, clientRequest.getLocalName()); + } + + if (StringUtils.isNotEmpty(clientRequest.getHeader(HttpHeader.HOST.asString()))) { + proxyRequest.header(HttpHeader.HOST, clientRequest.getHeader(HttpHeader.HOST.asString())); + } + + if (StringUtils.isNotEmpty(clientRequest.getHeader(X_Real_IP))) { + proxyRequest.header(X_Real_IP, clientRequest.getHeader(X_Real_IP)); + } else { + proxyRequest.header(X_Real_IP, clientRequest.getRemoteAddr()); + } + +// if (StringUtils.isNotEmpty(clientRequest.getHeader(HttpHeader.UPGRADE.asString()))) { +// proxyRequest.header(HttpHeader.UPGRADE, clientRequest.getHeader(HttpHeader.UPGRADE.asString())); +// } +// +// if (StringUtils.isNotEmpty(clientRequest.getHeader(HttpHeader.CONNECTION.asString()))) { +// proxyRequest.header(HttpHeader.CONNECTION, clientRequest.getHeader(HttpHeader.CONNECTION.asString())); +// } +// +// if (StringUtils.isNotEmpty(clientRequest.getHeader(HttpHeader.SEC_WEBSOCKET_EXTENSIONS.asString()))) { +// proxyRequest.header(HttpHeader.SEC_WEBSOCKET_EXTENSIONS, +// clientRequest.getHeader(HttpHeader.SEC_WEBSOCKET_EXTENSIONS.asString())); +// } +// +// if (StringUtils.isNotEmpty(clientRequest.getHeader(HttpHeader.SEC_WEBSOCKET_KEY.asString()))) { +// proxyRequest.header(HttpHeader.SEC_WEBSOCKET_KEY, +// clientRequest.getHeader(HttpHeader.SEC_WEBSOCKET_KEY.asString())); +// } + + if (StringUtils.isNotEmpty(clientRequest.getHeader(HttpHeader.SEC_WEBSOCKET_VERSION.asString()))) { + proxyRequest.header(HttpHeader.SEC_WEBSOCKET_VERSION, + clientRequest.getHeader(HttpHeader.SEC_WEBSOCKET_VERSION.asString())); + } + + } + } -- GitLab