我在JDK 1.7平台上使用Primefaces JSF构建了一个Web应用程序。 在我的应用程序中,我有一个IP身份验证过程,在此过程中,当用户登录系统的IP存储在数据库中时,当用户注销时,会话关闭并且IP地址从数据库中清除,这样做是为了从单一系统添加单个用户的功能。(即假设用户通过系统登录一个帐户,现在他打开另一个浏览器选项卡并打开登录页面然后用户根据注册的IP第一个帐户的地址,用户将被限制在同一系统上使用不同的帐户登录。)
我已经实施了IP地址提取代码。当通过本地单一系统进行测试时,它的工作正常。现在我通过在另一个系统(即主服务器)上安装应用程序来检查系统而不是RMI(远程方法调用)进程,现在从另一个远程系统调用应用程序,RMI进程工作正常,Web应用程序成功打开另一个系统。现在在登录时我面临实际问题,问题出在IP地址上,当我检查数据库中的IP地址时,我发现IP地址不属于远程系统我想要的地方登录它是应用程序实际运行的服务器系统。
这是我用来获取IP地址的代码及其工作正常,因为它返回的是IP地址值。 InetAddress inetAddress = InetAddress.getLocalHost(); ip地址= inetAddress.getHostAddress();
请帮助我解决我的问题。 提前谢谢。
答案 0 :(得分:0)
刚刚解决了这个问题,解决方案很简单 问题在于我的IP地址提取代码
我正在使用getHostAddress()函数来获取IP地址。所以它返回了主机地址,即应用程序运行的地方。
因此,对于我使用的解决方案,获取使用
获取的远程系统IPHttpServletRequest request = (HttpServletRequest)FacesContext.getCurrentInstance().getExternalContext().getRequest();
ipAddress = request.getHeader("X-FORWARDED-FOR");
if (ipAddress == null) {
ipAddress = request.getRemoteAddr();
}
这是我获取IP地址的解决方案。