2012-09-19 29 views
5

我有一個運行在Tomcat中的Java servlet應用程序,有一個管理命令我只想從中運行機器本身(或者也可能是我自己的電腦)出於安全原因。因此,要執行這個我檢查HttpServletRequest的,我接受,但遠程地址它總是返回即使請求沒有從本地主機從遠程機器訪問時爲什麼request.getRemoteAddr()。equals(「127.0.0.1」)

爲什麼會這樣,我可以修復它還是有未來127.0.0.1另一種僅從服務器運行我的管理命令的方法。

+0

你能否粘貼一些你的代碼並解釋你在哪裏試圖執行這個檢查? – Scis

+2

在它運行的機器(例如nginx)上的tomcat前面是否有東西轉發請求?試着看看'X-Forwarded-For'標題。 –

+0

@Jonas Adler,謝謝是的,當我從服務器運行而不是我的homepc時,x-forwarded-for的值是不同的(儘管當我從我的家用電腦運行時,它的值不匹配我的家用電腦ipaddress),所以我想我應該請檢查x-forwarded-for的值,並限制對我的服務器計算機的訪問。 –

回答

3

首先檢查請求是否包含「X-Forwarded-For」標頭。如果標題已設置,則其中的第一個IP應該是您正在查找的IP。如果標頭爲空request.getRemoteAddr()應返回正確的IP。

維基爲「X - 轉發,對於」:http://en.wikipedia.org/wiki/X-Forwarded-For

請注意,你不能100%確保您得到正確的IP是這樣,因爲轉發情況下,不強制設置「X - 轉發,對於'標題。