我想在用户登录我的页面的同时就获取用户的IP 地址,并在数据库中保存下来。这个IP 地址是一个字符串,我采用UserIP下的一个属性值(ip)去建表存在数据库中。UserIP表与user表关联。现在是怎么获得这个真实的IP 地址很头痛,网络上的一些我看了下,如果用户设置了代理,那么获得的IP值就是代理端的。求各位大大,为小弟解决小这个问题。先谢过了!

解决方案 »

  1.   

    public static String getClientIP(HttpServletRequest httpservletrequest) {
     if (httpservletrequest == null)
      return null;
     String s = httpservletrequest.getHeader("X-Forwarded-For");
     if (s == null || s.length() == 0 || "unknown".equalsIgnoreCase(s))
      s = httpservletrequest.getHeader("Proxy-Client-IP");
     if (s == null || s.length() == 0 || "unknown".equalsIgnoreCase(s))
      s = httpservletrequest.getHeader("WL-Proxy-Client-IP");
     if (s == null || s.length() == 0 || "unknown".equalsIgnoreCase(s))
      s = httpservletrequest.getHeader("HTTP_CLIENT_IP");
     if (s == null || s.length() == 0 || "unknown".equalsIgnoreCase(s))
      s = httpservletrequest.getHeader("HTTP_X_FORWARDED_FOR");
     if (s == null || s.length() == 0 || "unknown".equalsIgnoreCase(s))
      s = httpservletrequest.getRemoteAddr();
     if ("127.0.0.1".equals(s) || "0:0:0:0:0:0:0:1".equals(s))
      try {
       s = InetAddress.getLocalHost().getHostAddress();
      }
      catch (UnknownHostException unknownhostexception) {
      }
     return s;
    }
      

  2.   

    通过两种方式获取用户IP,一个是getRemoteAddr(),一个是从Header中获取用户IP。String clientIp = request.getHeader("x-forwarded-for");
    if ((clientIp == null) || (clientIp.length() == 0) || ("unknown".equalsIgnoreCase(clientIp))) {
    clientIp = request.getHeader("Proxy-Client-IP");
    }
    if ((clientIp == null) || (clientIp.length() == 0) || ("unknown".equalsIgnoreCase(clientIp))) {
    clientIp = request.getHeader("WL-Proxy-Client-IP");
    }
    if ((clientIp == null) || (clientIp.length() == 0) || ("unknown".equalsIgnoreCase(clientIp))) {
    clientIp = request.getRemoteAddr();
    }
      

  3.   

    获得请求的httpservletrequest 对象,传给这个方法。