Loading

java中常见的IP获取问题

通常情况下,java中获取request中的IP地址的方法为:request.getRemoteAddr(),但是在一下情况就需要特殊处理了。

1.访问机器通过地址代理访问服务器时,request.getRemoteAddr()获取的往往是代理服务器的IP,我们需要通过一下方法来进行获取:

public static String getIp(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.getRemoteAddr();
    }
    return ip;
}                

 

2.如果项目部署的服务器采用nginx做了反向代理的话,用上面的方法只会取到127.0.0.1,需要在nginx中转发动态页面给Tomcat处理时进行如下配置:

proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

配置后,通过request.getHeader("X-Real-IP")就能获取客户的真正IP。

posted @ 2012-11-26 10:07  伊莫的森林  阅读(207)  评论(0)    收藏  举报