我有一个使用 Java、JSP 的 Web 应用程序。我想确保用户只能在他/她的同一台设备上回答同一个问题一次。我尝试检查用户计算机上的 IP 地址。一旦使用了设备 IP 地址,用户将无法在设备上再次回答相同的问题。
我尝试将 IP 地址捕获为
String ip = request.getRemoteAddr();
System.out.println("IP Address: "+ip);
但是打印出来的ip如下。IP地址:0:0:0:0:0:0:0:1
请让我如何正确捕获用户的设备IP地址?或者任何更好的方法来确保同一设备不能被用于同一问题两次或更多次。
提前致谢
更新 我将以下代码添加到jsp页面试图捕获客户的 IP 地址,但我仍然不断获取生产服务器的 IP 地址(我将应用程序上传到生产站点)。你能告诉我为什么吗?我应该得到客户的设备 IP 地址。
提前致谢!
String ip = "";
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();
}
System.out.println("ip: " +ip);
您将获得环回 IPv6 接口,因为您通过localhost
. 尝试打开http://<your local IP>:<your AS port>
。
无论如何,要获取远程用户 IP,首先要检查X-Forwarded-For
标头。如果用户通过代理服务器访问您的网站,remoteAddr
则代理地址将是代理地址,在此标头中,您可能拥有远程用户地址。
request.getHeader("X-Forwarded-For")
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句