2015-02-23 82 views
-1

我已经在JDK 1.7平台上使用Primefaces JSF构建了一个Web应用程序。 在我的应用程序中,我有一个IP身份验证过程,在这个过程中,当用户登录系统的IP时,将其存储在数据库中,并且当用户注销时,会话关闭,IP地址从数据库中清除,这样做是为了从单个系统添加单用户的功能(即假设用户通过系统登录一个帐户,现在他打开另一个浏览器选项卡并打开登录页面,然后用户基于注册第一个帐户的IP地址,用户将被限制在同一系统上使用不同帐户登录。)如何获取远程系统的IP地址?

我已经实现了IP地址提取代​​码。并且在本地单一系统上测试时它的工作状况良好。现在我通过在另一个系统(即主服务器)上安装应用程序并且现在从另一个远程系统调用应用程序来检查RMI(远程方法调用)过程的系统,RMI过程工作得很好,Web应用程序成功打开另一个系统。现在在登录时我遇到了实际问题,并且问题出在IP地址上,当我检查出数据库中的IP地址时,我发现IP地址不是远程系统,我尝试登录它是应用程序实际运行的服务器系统。

这是他用来取得IP地址的代码,它的工作正常,因为它正在返回IP地址值。 InetAddress inetAddress = InetAddress.getLocalHost(); ipAddress = inetAddress.getHostAddress();

请帮我解决我的问题。 预先感谢您。

+0

然后,您必须检索Web层中的IP地址,并将其用作rmi调用中的参数 – Kukeltje 2015-02-23 08:16:10

+0

为什么问题标记为-ve? – 2015-02-23 10:33:08

+0

Thanks kukeltje for your help – 2015-02-23 10:47:44

回答

0

恰恰解决了这个问题,解决方法很简单 问题是我的IP地址获取指令代码

我使用getHostAddress()函数来获取IP地址。所以它返回了我的主机地址,即应用程序正在运行的地方。

那么对于解决方案,我已经使用获得远程系统IP这是取使用

HttpServletRequest request = (HttpServletRequest)FacesContext.getCurrentInstance().getExternalContext().getRequest(); 
ipAddress = request.getHeader("X-FORWARDED-FOR"); 
if (ipAddress == null) { 
ipAddress = request.getRemoteAddr(); 
} 

这是该解决方案为我取IP地址。

+0

'request.getHeader(“X-FORWARDED-FOR”);'会给你头标值,攻击者可以设置他的喜好。正因为如此,我总是使用'request.getRemoteAddr()'并独立登录'X-FORWARDED-FOR'-IP。 – hinneLinks 2015-10-19 08:11:52