我需要开发一个Web应用程序,通过在服务器端存储一对(sourceIP,有效用户名)来识别已知机器并且未知,之前登录成功。当任何人从未知机器登录时如何识别.web应用程序托管在本地host.is它可以获取客户端IP.when检索客户端IP我只得到127.0.0.1这是localhost.anyone有任何想法......?
答案 0 :(得分:3)
简短的回答是,您无法始终获得真实的客户端IP地址。
如果客户端具有自己的IP地址并直接连接到服务器,则HttpServletRequest.getRemoteAddr()
应该返回它。但是:
如果客户端的请求通过代理或反向代理到达服务器,则getRemoteAddr()
将返回第一个上游代理地址。
如果客户端来自 localhost,则客户端将localhost
称为服务器。
如果客户端位于NAT网关或IPv4< - >之后。 IPv6网桥您可能会看到网关或网桥的IP地址。
然后存在IP地址可能被欺骗的问题。
简而言之,依赖了解真实客户端IP地址的安全方案通常存在问题。
如果您的问题是由反向代理引起的(并且看到127.0.0.1会暗示这一点),您可以让反向代理向请求添加请求标头,以说出它看到的远程IP地址。然后服务器需要使用该标头而不是getRemoteAddr()
。但是,如果代理没有看到真正的客户端IP地址,那将无济于事。
答案 1 :(得分:0)
在Servlet中你可以这样做:
public class GetAddress extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
String ip = request.getRemoteAddr();
// now you can check if the ip exists and if not store it or do other usefull stuff ...
}
}