jsp获取ip地址

时间:2009-04-05 11:27:03

标签: java jsp

什么是防止某人投票两次的最佳方式?我如何获得用户的IP地址?如果他们在大型网络上怎么办?那个网络上的每个人都会显示相同的IP吗?感谢


UPDATE:request.getRemoteAddr()和request.getRemoteHost()返回服务器名称,而不是客户端的主机名和ip。其他人有什么好主意吗?


好的,所以让我们忘记投票两次。我只是想获取用户的IP地址?我尝试了request.getRemoteAddr()和request.getRemoteHost(),并认为我获取服务器地址。我可以访问两个独立的网络,并获得相同的IP地址:(

6 个答案:

答案 0 :(得分:9)

在JSP中,使用 request.getRemoteAddr()。这将返回以String形式发送请求的代理的IP地址。

此外, request.getRemoteHost()将尝试获取标准主机名。但是,如果无法解析名称,则会返回IP地址,如 getRemoteAddr()

答案 1 :(得分:2)

如果用户位于NAT routerproxy server后面,您会看到它们具有相同的IP地址。因此,这不是允许用户投票一次的最佳方式。

另一种方法是使用cookies,但同样可以删除cookie并再次投票。

答案 2 :(得分:2)

AFAIK阻止第二次投票的唯一方法是通过身份验证。显然这并不总是可行的,所以你必须减少单个用户投下大量选票的可能性。

  • 通过源IP限制投票。使用getRemoteAddr()允许,比如......每小时一次投票?......每分钟? ......这取决于你期望的投票数量。根据经验调整数量。
  • 为每个投票民意调查的响应设置一个cookie,该投票在投票结束后到期。
  • 通过检查和验证RefererUser-Agent之类的标题,更难以伪造请求。

答案 3 :(得分:2)

要获取路由器/防火墙后面的客户端IP,您可以使用 request.getHeader("X-FORWARDED-FOR")

  

X-Forwarded-For(XFF)HTTP标头   是事实上的识别标准   客户端的原始IP地址   通过连接到Web服务器   HTTP代理或负载均衡器。   http://en.wikipedia.org/wiki/X-Forwarded-For

请记住,您和客户之间的代理可以更改此值。虽然它应该是正确的IP。

答案 4 :(得分:0)

您可以使用request.getRemoteAddr()获取IP地址。如果网络使用NAT路由器,则所有用户都将获得相同的地址

答案 5 :(得分:0)

在您的JSP页面中,只需使用以下表达式:${pageContext.request.remoteAddr}