From 2edd93c901d85c2c4b3d559cda81791ee26a3d07 Mon Sep 17 00:00:00 2001 From: malcolmshen Date: Sun, 29 Jul 2018 22:06:31 +0800 Subject: [PATCH 1/2] =?UTF-8?q?request=20header=E4=B8=ADuserHost=E4=BF=A1?= =?UTF-8?q?=E6=81=AF=E4=B8=BA=E7=A9=BA=E6=97=B6=EF=BC=8C=E5=A2=9E=E5=BC=BA?= =?UTF-8?q?IP=E7=9A=84=E8=8E=B7=E5=8F=96=E6=96=B9=E5=BC=8F=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../security/common/util/EntityUtils.java | 4 +- .../wxiaoqi/security/common/util/IpUtils.java | 77 +++++++++++++++++++ 2 files changed, 79 insertions(+), 2 deletions(-) create mode 100644 ace-common/src/main/java/com/github/wxiaoqi/security/common/util/IpUtils.java diff --git a/ace-common/src/main/java/com/github/wxiaoqi/security/common/util/EntityUtils.java b/ace-common/src/main/java/com/github/wxiaoqi/security/common/util/EntityUtils.java index 20e15540..da2331b9 100644 --- a/ace-common/src/main/java/com/github/wxiaoqi/security/common/util/EntityUtils.java +++ b/ace-common/src/main/java/com/github/wxiaoqi/security/common/util/EntityUtils.java @@ -45,7 +45,7 @@ public class EntityUtils { String name = ""; String id = ""; if(request!=null) { - hostIp = StringUtils.trimToEmpty(request.getHeader("userHost")); + hostIp = StringUtils.defaultIfBlank(request.getHeader("userHost"), IpUtils.getClientRealIp(request)); name = StringUtils.trimToEmpty(request.getHeader("userName")); name = URLDecoder.decode(name); id = StringUtils.trimToEmpty(request.getHeader("userId")); @@ -82,7 +82,7 @@ public class EntityUtils { String name = ""; String id = ""; if(request!=null) { - hostIp = StringUtils.trimToEmpty(request.getHeader("userHost")); + hostIp = StringUtils.defaultIfBlank(request.getHeader("userHost"), IpUtils.getClientRealIp(request)); name = StringUtils.trimToEmpty(request.getHeader("userName")); name = URLDecoder.decode(name); id = StringUtils.trimToEmpty(request.getHeader("userId")); diff --git a/ace-common/src/main/java/com/github/wxiaoqi/security/common/util/IpUtils.java b/ace-common/src/main/java/com/github/wxiaoqi/security/common/util/IpUtils.java new file mode 100644 index 00000000..8800a2ea --- /dev/null +++ b/ace-common/src/main/java/com/github/wxiaoqi/security/common/util/IpUtils.java @@ -0,0 +1,77 @@ +package com.github.wxiaoqi.security.common.util; + +import org.apache.commons.lang3.ArrayUtils; +import org.apache.commons.lang3.StringUtils; + +import javax.servlet.http.HttpServletRequest; + +/** + * 根据HttpServletRequest获取IP的辅助类 + * + * @author malcolm.shen@qq.com + * @date:2018/7/27 17:23 + */ +public class IpUtils { + private static final String HTTP_HEADER_CDN_SRC_IP = "Cdn-Src-Ip"; + private static final String[] HTTP_HEADER_IP_ADDRESS = { "x-forwarded-for", "Proxy-Client-IP", "WL-Proxy-Client-IP" }; + private static final String[] HTTP_HEADER_IP_ADDRESS_ALL = (String[]) ArrayUtils.addAll( + new String[] { HTTP_HEADER_CDN_SRC_IP }, HTTP_HEADER_IP_ADDRESS); + + public static String getCdnSrcIp(HttpServletRequest request) { + return (null == request) ? null : request.getHeader(HTTP_HEADER_CDN_SRC_IP); + } + + /** + * No CDN logic for IP address. + */ + public static String getNormalClientIp(HttpServletRequest request) { + return getIpAddress(request, HTTP_HEADER_IP_ADDRESS, false); + } + + public static String getClientRealIp(HttpServletRequest request) { + return getIpAddress(request, HTTP_HEADER_IP_ADDRESS_ALL, false); + } + + public static String getFullClientIp(HttpServletRequest request) { + return getIpAddress(request, HTTP_HEADER_IP_ADDRESS_ALL, true); + } + + private static String getIpAddress(HttpServletRequest request, String[] ipHeaders, boolean keepProxyIp) { + if (null == request || ipHeaders == null) { + return null; + } + + String ip = null; + + for (String key : ipHeaders) { + ip = request.getHeader(key); + if (StringUtils.isNotBlank(ip) && !"unknown".equalsIgnoreCase(ip)) { + break; + } + } + // default + if (StringUtils.isBlank(ip) || "unknown".equalsIgnoreCase(ip)) { + ip = request.getRemoteAddr(); + } + + return getIp(ip, keepProxyIp); + } + + private static String getIp(String ipString, boolean keepProxyIp) { + if (StringUtils.isNotBlank(ipString)) { + if (keepProxyIp) { + return ipString.trim(); + } else { + String[] ips = ipString.split(","); + for (String ip : ips) { + if (StringUtils.isNotBlank(ip) && !"unknown".equalsIgnoreCase(ip)) { + return ip.trim(); + } + } + return ""; + } + } else { + return ""; + } + } +} -- Gitee From ae83a054cd81254798926d862a8e2d140cf61050 Mon Sep 17 00:00:00 2001 From: malcolmshen Date: Sun, 29 Jul 2018 22:14:44 +0800 Subject: [PATCH 2/2] =?UTF-8?q?request=20header=E4=B8=ADuserHost=E4=BF=A1?= =?UTF-8?q?=E6=81=AF=E4=B8=BA=E7=A9=BA=E6=97=B6=EF=BC=8C=E5=A2=9E=E5=BC=BA?= =?UTF-8?q?IP=E7=9A=84=E8=8E=B7=E5=8F=96=E6=96=B9=E5=BC=8F=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../security/common/util/EntityUtils.java | 4 +- .../wxiaoqi/security/common/util/IpUtils.java | 77 ------------------- 2 files changed, 2 insertions(+), 79 deletions(-) delete mode 100644 ace-common/src/main/java/com/github/wxiaoqi/security/common/util/IpUtils.java diff --git a/ace-common/src/main/java/com/github/wxiaoqi/security/common/util/EntityUtils.java b/ace-common/src/main/java/com/github/wxiaoqi/security/common/util/EntityUtils.java index da2331b9..baa86cdb 100644 --- a/ace-common/src/main/java/com/github/wxiaoqi/security/common/util/EntityUtils.java +++ b/ace-common/src/main/java/com/github/wxiaoqi/security/common/util/EntityUtils.java @@ -45,7 +45,7 @@ public class EntityUtils { String name = ""; String id = ""; if(request!=null) { - hostIp = StringUtils.defaultIfBlank(request.getHeader("userHost"), IpUtils.getClientRealIp(request)); + hostIp = StringUtils.defaultIfBlank(request.getHeader("userHost"), ClientUtil.getClientIp(request)); name = StringUtils.trimToEmpty(request.getHeader("userName")); name = URLDecoder.decode(name); id = StringUtils.trimToEmpty(request.getHeader("userId")); @@ -82,7 +82,7 @@ public class EntityUtils { String name = ""; String id = ""; if(request!=null) { - hostIp = StringUtils.defaultIfBlank(request.getHeader("userHost"), IpUtils.getClientRealIp(request)); + hostIp = StringUtils.defaultIfBlank(request.getHeader("userHost"), ClientUtil.getClientIp(request)); name = StringUtils.trimToEmpty(request.getHeader("userName")); name = URLDecoder.decode(name); id = StringUtils.trimToEmpty(request.getHeader("userId")); diff --git a/ace-common/src/main/java/com/github/wxiaoqi/security/common/util/IpUtils.java b/ace-common/src/main/java/com/github/wxiaoqi/security/common/util/IpUtils.java deleted file mode 100644 index 8800a2ea..00000000 --- a/ace-common/src/main/java/com/github/wxiaoqi/security/common/util/IpUtils.java +++ /dev/null @@ -1,77 +0,0 @@ -package com.github.wxiaoqi.security.common.util; - -import org.apache.commons.lang3.ArrayUtils; -import org.apache.commons.lang3.StringUtils; - -import javax.servlet.http.HttpServletRequest; - -/** - * 根据HttpServletRequest获取IP的辅助类 - * - * @author malcolm.shen@qq.com - * @date:2018/7/27 17:23 - */ -public class IpUtils { - private static final String HTTP_HEADER_CDN_SRC_IP = "Cdn-Src-Ip"; - private static final String[] HTTP_HEADER_IP_ADDRESS = { "x-forwarded-for", "Proxy-Client-IP", "WL-Proxy-Client-IP" }; - private static final String[] HTTP_HEADER_IP_ADDRESS_ALL = (String[]) ArrayUtils.addAll( - new String[] { HTTP_HEADER_CDN_SRC_IP }, HTTP_HEADER_IP_ADDRESS); - - public static String getCdnSrcIp(HttpServletRequest request) { - return (null == request) ? null : request.getHeader(HTTP_HEADER_CDN_SRC_IP); - } - - /** - * No CDN logic for IP address. - */ - public static String getNormalClientIp(HttpServletRequest request) { - return getIpAddress(request, HTTP_HEADER_IP_ADDRESS, false); - } - - public static String getClientRealIp(HttpServletRequest request) { - return getIpAddress(request, HTTP_HEADER_IP_ADDRESS_ALL, false); - } - - public static String getFullClientIp(HttpServletRequest request) { - return getIpAddress(request, HTTP_HEADER_IP_ADDRESS_ALL, true); - } - - private static String getIpAddress(HttpServletRequest request, String[] ipHeaders, boolean keepProxyIp) { - if (null == request || ipHeaders == null) { - return null; - } - - String ip = null; - - for (String key : ipHeaders) { - ip = request.getHeader(key); - if (StringUtils.isNotBlank(ip) && !"unknown".equalsIgnoreCase(ip)) { - break; - } - } - // default - if (StringUtils.isBlank(ip) || "unknown".equalsIgnoreCase(ip)) { - ip = request.getRemoteAddr(); - } - - return getIp(ip, keepProxyIp); - } - - private static String getIp(String ipString, boolean keepProxyIp) { - if (StringUtils.isNotBlank(ipString)) { - if (keepProxyIp) { - return ipString.trim(); - } else { - String[] ips = ipString.split(","); - for (String ip : ips) { - if (StringUtils.isNotBlank(ip) && !"unknown".equalsIgnoreCase(ip)) { - return ip.trim(); - } - } - return ""; - } - } else { - return ""; - } - } -} -- Gitee