2012-09-19 4 views
5

Ich habe eine Java-Servlet-Anwendung in Tomcat läuft, es gibt einen Admin-Befehl, von dem ich nur ausführen möchte die Maschine selbst (oder möglicherweise auch mein eigener PC) aus Sicherheitsgründen. Also, dies zu erzwingen prüfe ich die Remote-Adresse des HttpServletRequest, dass ich erhalten, aber es gibt immer 127.0.0.1 obwohl die Anforderung nicht von dem lokalen Host kommtWarum ist request.getRemoteAddr(). Gleich ("127.0.0.1") beim Zugriff von einem Remote-Rechner

Warum dies ist, kann ich es beheben oder gibt es eine alternative Möglichkeit, meinen Admin-Befehl nur vom Server auszuführen.

+0

Können Sie bitte etwas von Ihrem Code einfügen und erklären, wo Sie diese Überprüfung durchführen möchten? – Scis

+2

Gibt es etwas vor dem Tomcat auf dem Rechner, auf dem es läuft (z. B. nginx), der die Anfrage weiterleitet? Werfen Sie einen Blick auf den Header "X-Forwarded-For". –

+0

@Jonas Adler, danke ja der x-forwarded-for-Wert, wenn ich vom Server im Gegensatz zu meinem Homepc läuft, ist anders (obwohl der Wert, wenn ich von meinem PC zu Hause nicht meine Heimat PC-Adresse läuft) so denke ich sollte ich Überprüfen Sie stattdessen den Wert x-forwarded-for und beschränken Sie den Zugriff auf meinen Server-Computer. –

Antwort

3

Überprüfen Sie zuerst, ob die Anfrage den Header 'X-Forwarded-For' hat. Wenn die Kopfzeile festgelegt ist, sollte die erste IP-Adresse die gesuchte sein. Wenn der Header leer ist, sollte request.getRemoteAddr() die richtige IP zurückgeben.

Wiki für 'X-Forwarded-For': http://en.wikipedia.org/wiki/X-Forwarded-For

Beachten Sie, dass Sie nicht zu 100% sicher sein, dass Sie die richtigen IP wie diese zu erhalten Instanzen, da die Weiterleitung nicht den ‚X-Forwarded-For zu setzen gezwungen ' Header.