IpUtil.java 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. package cn.com.qmth.mps.util;
  2. import org.apache.commons.lang3.StringUtils;
  3. import javax.servlet.http.HttpServletRequest;
  4. /**
  5. * @Description 获取ip工具类
  6. */
  7. public class IpUtil {
  8. /**
  9. * 获取过程ip(默认不包含代理ip)
  10. *
  11. * @param request
  12. * @return
  13. */
  14. public static String getRemoteIp(HttpServletRequest request) {
  15. return getRemoteIp(request, true);
  16. }
  17. /**
  18. * excludeProxyIp
  19. *
  20. * @param request
  21. * @param excludeProxyIp 是否排除代理ip
  22. * @return
  23. */
  24. public static String getRemoteIp(HttpServletRequest request, boolean excludeProxyIp) {
  25. String ip = request.getHeader("X-Forwarded-For");
  26. if (StringUtils.isBlank(ip) || "unknown".equalsIgnoreCase(ip)) {
  27. ip = request.getHeader("x-real-ip");
  28. }
  29. if (StringUtils.isBlank(ip) || "unknown".equalsIgnoreCase(ip)) {
  30. ip = request.getHeader("Proxy-Client-IP");
  31. }
  32. if (StringUtils.isBlank(ip) || "unknown".equalsIgnoreCase(ip)) {
  33. ip = request.getHeader("WL-Proxy-Client-IP");
  34. }
  35. if (StringUtils.isBlank(ip) || "unknown".equalsIgnoreCase(ip)) {
  36. ip = request.getHeader("HTTP_CLIENT_IP");
  37. }
  38. if (StringUtils.isBlank(ip) || "unknown".equalsIgnoreCase(ip)) {
  39. ip = request.getHeader("HTTP_X_FORWARDED_FOR");
  40. }
  41. if (StringUtils.isBlank(ip) || "unknown".equalsIgnoreCase(ip)) {
  42. ip = request.getRemoteAddr();
  43. }
  44. if (excludeProxyIp) {
  45. //对于通过多个代理的情况,第一个IP为客户端真实IP,多个IP按照','分割
  46. if (ip != null && ip.length() > 15) { //"***.***.***.***".length() = 15
  47. if (ip.indexOf(",") > 0) {
  48. ip = ip.substring(0, ip.indexOf(","));
  49. }
  50. }
  51. }
  52. if("0:0:0:0:0:0:0:1".equals(ip)) {
  53. ip="127.0.0.1";
  54. }
  55. return ip;
  56. }
  57. }