1 package com.utils;
2
3 import org.slf4j.Logger;
4 import org.slf4j.LoggerFactory;
5
6 import javax.servlet.http.HttpServletRequest;
7 import java.io.IOException;
8
9 /**
10 * 获取请求主机IP地址,如果通过代理进来,则透过防火墙获取真实IP地址;
11 *
12 */
13 public final class NetworkUtil {
14
15 private static final Logger LOG = LoggerFactory.getLogger(NetworkUtil.class);
16
17 public final static String getIpAddress(HttpServletRequest request)
18 throws IOException {
19
20 String ip = request.getHeader("X-Forwarded-For");
21
22 // LOG.info("getIpAddress(HttpServletRequest) - X-Forwarded-For - String ip= {}" ,ip);
23
24 if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
25 if (ip == null || ip.length() == 0
26 || "unknown".equalsIgnoreCase(ip)) {
27 ip = request.getHeader("Proxy-Client-IP");
28 // LOG.info("getIpAddress(HttpServletRequest) - Proxy-Client-IP - String ip= {}" , ip);
29 }
30 if (ip == null || ip.length() == 0
31 || "unknown".equalsIgnoreCase(ip)) {
32 ip = request.getHeader("WL-Proxy-Client-IP");
33 // LOG.info("getIpAddress(HttpServletRequest) - WL-Proxy-Client-IP - String ip= {}" , ip);
34 }
35 if (ip == null || ip.length() == 0
36 || "unknown".equalsIgnoreCase(ip)) {
37 ip = request.getHeader("HTTP_CLIENT_IP");
38 // LOG.info("getIpAddress(HttpServletRequest) - HTTP_CLIENT_IP - String ip= {}" , ip);
39 }
40 if (ip == null || ip.length() == 0
41 || "unknown".equalsIgnoreCase(ip)) {
42 ip = request.getHeader("HTTP_X_FORWARDED_FOR");
43 // LOG.info("getIpAddress(HttpServletRequest) - HTTP_X_FORWARDED_FOR - String ip= {}" , ip);
44 }
45 if (ip == null || ip.length() == 0
46 || "unknown".equalsIgnoreCase(ip)) {
47 ip = request.getRemoteAddr();
48 // LOG.info("getIpAddress(HttpServletRequest) - getRemoteAddr - String ip= {}" , ip);
49 }
50 } else if (ip.length() > 15) {
51 String[] ips = ip.split(",");
52 for (int index = 0; index < ips.length; index++) {
53 String strIp = (String) ips[index];
54 if (!("unknown".equalsIgnoreCase(strIp))) {
55 ip = strIp;
56 break;
57 }
58 }
59 }
60 return ip;
61 }
62 }