本文共 1715 字,大约阅读时间需要 5 分钟。
public String getIp(HttpServletRequest request) { 2. String ip= request.getHeader("X-Forwarded-For"); 3. if (ip== null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) 4. ip= request.getHeader("Proxy-Client-IP"); 5. if (ip== null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) 6. ip= request.getHeader("WL-Proxy-Client-IP"); 7. if (ip== null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) 8. ip= request.getHeader("HTTP_CLIENT_IP"); 9. if (ip== null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) 10. ip= request.getHeader("HTTP_X_FORWARDED_FOR"); 11. if (ip== null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) 12. ip= request.getRemoteAddr(); 13. if ("127.0.0.1".equals(ip) || "0:0:0:0:0:0:0:1".equals(ip)){ 14. try { 15. ip= InetAddress.getLocalHost().getHostAddress(); 16. } 17. catch (UnknownHostException e) { 18. e.printStackTrace(); 19. } 20. } 21. return ip 22.} Java代码 复制代码 收藏代码 1./** 2. * 获取访问者IP 3. * 4. * 在一般情况下使用Request.getRemoteAddr()即可,但是经过nginx等反向代理软件后,这个方法会失效。 5. * 6. * 本方法先从Header中获取X-Real-IP,如果不存在再从X-Forwarded-For获得第一个IP(用,分割), 7. * 如果还不存在则调用Request .getRemoteAddr()。 8. * 9. * @param request 10. * @return 11. */ 12. public static String getIpAddr(HttpServletRequest request) { 13. String ip = request.getHeader("X-Real-IP"); 14. if (!StringUtils.isBlank(ip) && !"unknown".equalsIgnoreCase(ip)) { 15. return ip; 16. } 17. ip = request.getHeader("X-Forwarded-For"); 18. if (!StringUtils.isBlank(ip) && !"unknown".equalsIgnoreCase(ip)) { 19. // 多次反向代理后会有多个IP值,第一个为真实IP。 20. int index = ip.indexOf(','); 21. if (index != -1) { 22. return ip.substring(0, index); 23. } else { 24. return ip; 25. } 26. } else { 27. return request.getRemoteAddr(); 28. } 29. }转载地址:http://gznoi.baihongyu.com/