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。

浙公网安备 33010602011771号