2016-03-21 16 views
-2

Wenn ich Tomcat 7 mit Java 6 starte, gibt die Methode HttpServletRequest.getRemoteAddr() die IP-Adresse wie erwartet zurück.HttpServletRequest.getRemoteAddr() leer für Tomcat 8 Java 8

Wenn ich Tomcat 8 mit Java 8 ausführen, gibt dieselbe Methode eine leere Zeichenfolge zurück.

Der Header X-Forwarded-For ist auch null in beiden Szenarien.

Die Nachrichten werden über Websockets mit Atmosphere gesendet.

Auch remoteHost() und remoteUser() sind beide leer.

+0

Sie haben nicht genügend Informationen zur Verfügung gestellt. Wenn Sie sich die Mühe gemacht hätten, 'HttpServletRequest.getRemoteAddr gibt null 'in eine Suchmaschine einzugeben, hätten Sie viele Treffer erhalten. –

+0

Ja ich suchte nach einer Stunde und keiner von ihnen beantwortet meine Frage über den einzigen Unterschied Tomcat/Java-Version. Also danke, du warst so hilfreich. – Zack

Antwort

2

JSR-356 Websocket-Spezifikation stellt die Client-IP nicht dar, weshalb HttpServletRequest.getRemoteAddr()null zurückgibt.

Dies erklärt auch, warum HttpServletRequest.getRemoteAddr() einen leeren String oder 0.0.0.0 zurückgibt, abhängig von der von Ihnen verwendeten Version von Atmosphere, da Atmosphere die HttpServletRequest ändert.

Obwohl in der Tomcat 7-Dokumentation zu Websocket "Tomcat die von JSR-356 definierte Java WebSocket 1.1-API implementiert", gibt HttpServletRequest.getRemoteAddr() immer noch die Client-IP zurück, wenn ich Tomcat Version 7.0.68 ausführe Adresse über Websocket. Dies trifft zu, wenn ich Tomcat mit Java 6, 7 oder 8 austrage.

Die Tomcat 8-Dokumentation zu Websockets gibt außerdem an, dass "Tomcat die von JSR-356 definierte Java WebSocket 1.1-API implementiert" und wenn dieselbe Anwendung auf Tomcat ausgeführt wird 8, dass ich auf 7 lief, HttpServletRequest.getRemoteAddr() gibt eine leere Zeichenfolge zurück.