javaweb獲取客戶端真實ip

在安全性要求較高的web項目中,我們經常有這樣的需求:

黑名單:禁止指定ip訪問。

白名單:允許指定ip訪問。

根據ip追蹤惡意***系統者。


在java中我們通常可以這樣獲取客戶端ip地址:

request.getRemoteAddr()


但是這個方法有個弊端,就是如果對方使用了反向代理,那麼這個方法獲取到的永遠都是反向代理服務器的ip,而並非用戶的真實ip。這樣也能達到禁止訪問的目的,但是對於已經發生的惡意***,我們卻無法定位到真實的用戶主機。


當你遇到類似的問題時,那麼下面的代碼就能夠很好的幫助你。

public static String getClientIP(HttpServletRequest request) {
		String ip = request.getHeader("X-Forwarded-For");
		if (StringUtils.isNotEmpty(ip) && !"unKnown".equalsIgnoreCase(ip)) {
			// 多次反向代理後會有多個ip值,第一個ip纔是真實ip
			int index = ip.indexOf(",");
			if (index != -1) {
				return ip.substring(0, index);
			} else {
				return ip;
			}
		}
		ip = request.getHeader("X-Real-IP");
		if (StringUtils.isNotEmpty(ip) && !"unKnown".equalsIgnoreCase(ip)) {
			return ip;
		}
		return request.getRemoteAddr();
	}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章