平常项目中我们需要在日志记录中记录当前登录人的ip等信息,因此,下面列出一个公共的获取本地ip的方法。
import javax.servlet.http.HttpServletRequest;
public class IPUtil {
public static String getIPFromRequest(HttpServletRequest request){
String ip = request.getHeader(“x-forwarded-for”);
if (ip == null || ip.length() == 0 || “unknown”.equalsIgnoreCase(ip)) {
ip = request.getHeader(“Proxy-Client-IP”);
}
if (ip == null || ip.length() == 0 || “unknown”.equalsIgnoreCase(ip)) {
ip = request.getHeader(“WL-Proxy-Client-IP”);
}
if (ip == null || ip.length() == 0 || “unknown”.equalsIgnoreCase(ip)) {
ip = request.getHeader(“HTTP_CLIENT_IP”);
}
if (ip == null || ip.length() == 0 || “unknown”.equalsIgnoreCase(ip)) {
ip = request.getHeader(“HTTP_X_FORWARDED_FOR”);
}
if (ip == null || ip.length() == 0 || “unknown”.equalsIgnoreCase(ip)) {
ip = request.getRemoteAddr();
}
//但是有时项目中我们不需要记录代理或者其它途径的ip,只需记录一个我们自己的真实的ip,而request.getHeader(“x-forwarded-for”)该方法获取的就是真实的ip,其它ip会
以逗号拼接,因此我们只需将其截取就行。
if(ip != null && ip.length() > 15){
// “***.***.***.***”
int position = ip.indexOf(",");
if(position > 0){
ip = ip.substring(0, position);
}
}
return ip;
}
}