在Java Web開發中,有時候需要獲取客戶端的IP地址,包括外網和內網IP。下面就介紹一下如何通過Java代碼獲取客戶端的IP地址。
獲取外網IP
public static String getInternetIp() throws Exception { URL url = new URL("http://checkip.amazonaws.com"); BufferedReader in = null; try { in = new BufferedReader(new InputStreamReader(url.openStream())); String ipAddress = in.readLine().trim(); return ipAddress; } finally { if (in != null) { in.close(); } } }
利用訪問www.ip.cn等網站獲取ip地址在國內網絡有不穩定的問題,但是在AWS亞馬遜云上則不會有這個問題。
獲取內網IP
public static String getIntranetIp(HttpServletRequest request) { String ipAddress = request.getHeader("x-forwarded-for"); if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) { ipAddress = request.getHeader("Proxy-Client-IP"); } if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) { ipAddress = request.getHeader("WL-Proxy-Client-IP"); } if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) { ipAddress = request.getRemoteAddr(); } //如果是多級代理,那么取第一個IP為客戶端IP if (ipAddress != null && ipAddress.contains(",")) { ipAddress = ipAddress.substring(0, ipAddress.indexOf(",")).trim(); } return ipAddress; }
由于內外網地址分屬不同的網絡地址空間,所以需要使用不同的方式去獲取。這里介紹的是在Tomcat下獲取內網IP的方法,具體實現細節可以參考上面的代碼。
下一篇html登錄切換代碼