Java 获取请求的正确方式是什么';s ip
我找到了一些不同的方法在servlet中获取ip。但我不知道哪一个是对的,为什么 1: 2:Java 获取请求的正确方式是什么';s ip,java,ip,Java,Ip,我找到了一些不同的方法在servlet中获取ip。但我不知道哪一个是对的,为什么 1: 2: String ip = request.getHeader("X-Forwarded-For"); if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getHeader("Proxy-Client-IP"); } if (ip ==
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();
} `
3:
这似乎是我们能做的最多的事情,以获得客户端的原始IP地址
String ipAddress = request.getHeader("X-FORWARDED-FOR");
if (ipAddress == null) {
ipAddress = request.getRemoteAddr();
}
答案很复杂
- 如果servlet在反向代理或负载平衡器后面的web服务器上运行,那么可以将该web代理配置为插入一个请求头,该请求头提供请求来自的IP地址。不同的反向代理将注入不同的头。请参阅(前端)服务器的文档
- 如果您的客户端使用(转发)代理,那么它可能会插入头来说明客户端IP地址是什么。。。也可能不是。它插入的IP地址可能不正确
- 通过调用
得到的值将是请求的直接上游源的IP地址request.getRemoteAddr()
那么这一切意味着什么呢?基本上,这意味着一般来说,您无法可靠地找到请求来源的系统的IP地址。检查此链接:谢谢您的回答,我们使用nginx+tomcat+spring+spring mvc+mybatis,我在中国,这是我关于stackoverflow的第二个问题,我的第一个问题失败了--!。我认为我们应该对它进行更多的测试。@sprite-您应该查看nginx文档,了解它使用的是什么头文件。但这只会给你下一个上游主机的IP地址。。。这可能不是真正的客户。正如我所说,你不能总是得到真正的客户端IP。。。即使你可以,它也不一定是可靠的、有用的或独特的。好吧,我几乎理解你的建议。“下一个上游主机的IP地址”是指最后一个代理的IP地址吗?@StephenC@sprite-是的。这是网络级别上唯一可用的IP地址。(想想看,你不能完全依赖IP地址的真实性……因为IP地址是可以被欺骗的。)除非它不是;请参阅我的答案。这将不起作用,因为X-Forwarded-For可以包含一个逗号分隔的代理IP地址列表(可以选择使用空格)!它可以,但正如其他答案已经指出的那样,该值完全取决于代理的配置,在这种情况下,作为安全预防措施,您将覆盖任何此类上串头,因为它们不可信。
String ip=request.getHeader("x-forwarded-for");
if(ip==null){
ip=request.getRemoteAddr();
}
String ips[]=ip.split(",");`
ip=ips[0];
String ipAddress = request.getHeader("X-FORWARDED-FOR");
if (ipAddress == null) {
ipAddress = request.getRemoteAddr();
}