Woher weiß ich, ob die Anfrage an das Servlet über HTTP oder HTTPS ausgeführt wurde?

Lesezeit: 2 Minuten

Benutzer-Avatar
ufk

Ich habe ein Servlet in Java geschrieben und möchte wissen, ob die Anfrage an dieses Servlet mit HTTP oder HTTPS ausgeführt wurde.

Ich dachte, ich kann verwenden request.getProtocol() aber es gibt HTTP/1.1 bei beiden Methoden zurück.

Irgendwelche Ideen?

Benutzer-Avatar
Ramesh PVK

HttpSerlvetRequest.isSecure() ist die Antwort. Der ServletContainer ist in den folgenden Fällen für die Rückgabe von true verantwortlich:

  • Wenn der ServletContainer selbst Anfragen auf https annehmen kann.
  • Wenn sich vor ServletContainer ein LoadBalancer befindet. Und der LoadBlancer hat die Anfrage erhalten https und hat dasselbe an den ServletContainer weiter versandt einfaches http. In diesem Fall sendet der LoadBalancer X-SSL-Secure : wahr Header an den ServletContainer, der beachtet werden sollte.

Der Container sollte diese Anforderungsattribute auch verfügbar machen, wenn die Anforderung empfangen wird https:

  • javax.servlet.http.sslsessionid
  • javax.servlet.request.key_size
  • javax.servlet.request.X509Zertifikat

  • Können Sie bitte mitteilen, woher Sie das ‘X-SSL-Secure: true’-Bit bekommen haben? Ich suche weiter und kann keine weiteren Informationen zu diesem Header finden.

    – zbstof

    19. September 2016 um 12:56 Uhr

  • Dies funktioniert in meiner Umgebung nicht: Apache 2.4.10 als Front-Proxy; Es scheint unmöglich zu sein, in Java zu wissen, ob die Anfrage mit http oder https an Apache erfolgt ist. Sicher, ich bekomme es als http zu Java, aber ich muss wissen, wie auf den Front-Proxy zugegriffen wurde. – In der Tat, wie @Zotov auch erwähnte: Es gibt fast keine Informationen über den X-SSL-Secure-Header. Ich nehme also an, dass dies nicht umfassend implementiert ist?!

    – badera

    19. August 2017 um 7:49 Uhr


  • Der Header-Name kann abweichen, da er nicht sehr standardisiert ist. Aber das Konzept hier ist, dass die Proxys Header über das SSL hinzufügen können und die Server sie lesen können. Für Ex fügt Nginx das X-SSL-Protokoll hinzu. Es kann auch durch einen benutzerdefinierten Header ersetzt werden.

    – Ramesh PVK

    21. August 2017 um 23:15 Uhr

  • Ich schätze, Sie verwenden einen bestimmten Load Balancer als f5 und “X-SSL-Secure: true” ist ein optionaler Header, der nicht Teil eines Standards (auch nicht des Load Balancers) ist, oder?

    – Marek-A-

    14. April 2020 um 16:16 Uhr

Sie können sich nicht zuverlässig auf Portnummern verlassen.
Aber Sie können sich auf das Schema verlassen:

Verwenden: request.getScheme() um zu sehen, ob es so ist https.

Wenn ja, dann ist es eine sichere Verbindung.

Ich glaube, das sollte unabhängig von der Tomcat-Version funktionieren

  • isSecure geht auf mindestens zurück 1.2und ist nicht Tomcat-spezifisch.

    – Matthäus Flaschen

    21. November 2011 um 2:11 Uhr

istSicher. Achten Sie darauf, die geerbten Methoden zu überprüfen.

1179710cookie-checkWoher weiß ich, ob die Anfrage an das Servlet über HTTP oder HTTPS ausgeführt wurde?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy