IpUtil.java 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. package com.pine.common.utils;
  2. import javax.servlet.http.HttpServletRequest;
  3. import java.net.InetAddress;
  4. import java.net.UnknownHostException;
  5. /**
  6. * com.pine.common.utils
  7. *
  8. * @author Pine
  9. * @email 771190883@qq.com
  10. * @date 2019/10/16
  11. */
  12. public class IpUtil {
  13. public static String getIpAddr(HttpServletRequest request) {
  14. String ipAddress = null;
  15. try {
  16. ipAddress = request.getHeader("x-forwarded-for");
  17. if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {
  18. ipAddress = request.getHeader("Proxy-Client-IP");
  19. }
  20. if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {
  21. ipAddress = request.getHeader("WL-Proxy-Client-IP");
  22. }
  23. if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {
  24. ipAddress = request.getRemoteAddr();
  25. if (ipAddress.equals("127.0.0.1")) {
  26. // 根据网卡取本机配置的IP
  27. InetAddress inet = null;
  28. try {
  29. inet = InetAddress.getLocalHost();
  30. } catch (UnknownHostException e) {
  31. e.printStackTrace();
  32. }
  33. ipAddress = inet.getHostAddress();
  34. }
  35. }
  36. // 对于通过多个代理的情况,第一个IP为客户端真实IP,多个IP按照','分割
  37. if (ipAddress != null && ipAddress.length() > 15) { // "***.***.***.***".length()
  38. // = 15
  39. if (ipAddress.indexOf(",") > 0) {
  40. ipAddress = ipAddress.substring(0, ipAddress.indexOf(","));
  41. }
  42. }
  43. } catch (Exception e) {
  44. ipAddress="";
  45. }
  46. // ipAddress = this.getRequest().getRemoteAddr();
  47. return "0:0:0:0:0:0:0:1".equals(ipAddress) ? "127.0.0.1" : ipAddress;
  48. }
  49. }