javaweb_사용자 의 실제 ip 주소 가 져 오기

2176 단어 javaweb
일반적으로 Request. getRemoteAddr () 를 사용 하면 되 지만, nginx 등 역방향 프 록 시 를 통 해 이 방법 은 효력 을 상실 합 니 다.
따라서 비교적 성숙 한 틀 에서 비교적 좋 은 방법 을 볼 수 있다.
먼저 Header 에서 X - Real - IP 를 가 져 옵 니 다.
존재 하지 않 는 다 면 X - Forward - for 에서 첫 번 째 IP 를 가 져 와 쉼표 로 구분 합 니 다.
존재 하지 않 는 다 면 Request. getRemoteAddr () 를 호출 하 십시오.
소스 를 붙 여 볼 게 요.
1.
	/**
	 *      IP
	 * 
	 *         Request.getRemoteAddr()  ,    nginx        ,       。
	 * 
	 *      Header   X-Real-IP,       X-Forwarded-For     IP( ,  ),
	 *          Request .getRemoteAddr()。
	 * 
	 * @param request
	 * @return
	 */
	public static String getIpAddr(HttpServletRequest request) {
		String ip = request.getHeader("X-Real-IP");
		if (!StringUtils.isBlank(ip) && !"unknown".equalsIgnoreCase(ip)) {
			return ip;
		}
		ip = request.getHeader("X-Forwarded-For");
		if (!StringUtils.isBlank(ip) && !"unknown".equalsIgnoreCase(ip)) {
			//            IP ,      IP。
			int index = ip.indexOf(',');
			if (index != -1) {
				return ip.substring(0, index);
			} else {
				return ip;
			}
		} else {
			return request.getRemoteAddr();
		}
	}

2.
private String getIpAddr(HttpServletRequest request){
	    String netWork = request.getHeader("x-forwarded-for");
        if (netWork == null || netWork.length() == 0 || "unknown".equalsIgnoreCase(netWork)) {
            netWork = request.getHeader("Proxy-Client-IP");
        }
        if (netWork == null || netWork.length() == 0 || "unknown".equalsIgnoreCase(netWork)) {
            netWork = request.getHeader("WL-Proxy-Client-IP");
        }
        if (netWork == null || netWork.length() == 0 || "unknown".equalsIgnoreCase(netWork)) {
            netWork = request.getRemoteAddr();
        }
        //         ,X-Forwarded-For       ,    IP 
        if (netWork != null && netWork.contains(",")) {
            String ip_array[] = netWork.split(",");
            netWork = ip_array[0];
        }
        //System.out.println("-----------ip-----------:" + netWork);
        return netWork;

	}

좋은 웹페이지 즐겨찾기