2015-02-23 65 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

相關問題