web-dev-qa-db-fra.com

Comment savoir si la demande au servlet a été exécutée à l'aide de HTTP ou HTTPS?

J'ai écrit un servlet en Java et je voudrais savoir si la requête à ce servlet a été exécutée en utilisant HTTP ou HTTPS.

Je pensais pouvoir utiliser request.getProtocol() mais il renvoie HTTP/1.1 sur les deux méthodes.

Des idées?

66
ufk

HttpSerlvetRequest.isSecure () est la réponse. Le ServletContainer est responsable de renvoyer true dans les cas suivants:

  • Si le ServletContainer peut lui-même accepter les demandes sur https.
  • S'il y a un LoadBalancer devant ServletContainer. Et, le LoadBlancer a obtenu la demande sur https et a envoyé la même chose au ServletContainer sur http simple. Dans ce cas, le LoadBalancer envoie X-SSL-Secure: true en-tête au ServletContainer, qui doit être honoré.

Le conteneur doit également rendre ces attributs de demande disponibles lorsque la demande est reçue le https:

  • javax.servlet.http.sslsessionid
  • javax.servlet.request.key_size
  • javax.servlet.request.X509Certificate
96
Ramesh PVK

Vous ne pouvez pas dépendre de manière fiable des numéros de port.
Mais vous pouvez dépendre du schéma:

Utilisez: request.getScheme () pour voir s'il s'agit de https.

Si c'est le cas, c'est une connexion sécurisée.

Je pense que cela devrait fonctionner quelle que soit la version de Tomcat

27
Cratylus

isSecure . Assurez-vous de vérifier les méthodes héritées.

10
Matthew Flaschen