/**
* Project: doris.admin.config.service-0.1.0-SNAPSHOT
*
* File Created at 2011-5-13
* $Id$
*
* Copyright 1999-2100 Alibaba.com Corporation Limited.
* All rights reserved.
*
* This software is the confidential and proprietary information of
* Alibaba Company. ("Confidential Information"). You shall not
* disclose such Confidential Information and shall use it only in
* accordance with the terms of the license agreement you entered into
* with Alibaba.com.
*/
package com.alibaba.doris.admin.service.main;
import javax.servlet.http.HttpServletRequest;
import org.apache.commons.lang.StringUtils;
/**
* @author mian.hem
*
*/
public class DorisConfigUtil {
/**
* <p>
* 取客户端ip,处理客户端经过代理服务器访问我们的service的情况,我们希望拿到客户端的真实IP,
* 即使它经过多层代理.
* <p>
* request.getRemoteAddr()只能拿到直接请求Service的IP
* <p>
* 如果客户端的请求经过代理,那么在其Http头信息中会添加x-forwarded-for字段,记录原始IP,如果经过多级代理,
* 那么会按照先后顺序将原始IP记录下来
* <p>
* 有的服务器可能会将forwarded-for关掉,这时要通过Proxy-Client-IP或WL-Proxy-Client-IP来取值,
*
* @param request
* @return
*/
public static String getIpAddr(HttpServletRequest request) {
String ip = null;
ip = request.getHeader("x-forwarded-for");
if (StringUtils.isBlank(ip) || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("Proxy-Client-IP");
}
if (StringUtils.isBlank(ip) || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("WL-Proxy-Client-IP");
}
if (StringUtils.isBlank(ip) || "unknown".equalsIgnoreCase(ip)) {
ip = request.getRemoteAddr();
}
String[] temp = StringUtils.split(ip, ',');
if (temp.length > 1) {
for (int i = 0; i < temp.length; i++) {// 找到第一个不为unknown的值
if (!"unknown".equalsIgnoreCase(temp[i])) {
ip = temp[i];
break;
}
}
}
return ip;
}
}