2011-11-20 4 views

risposta

83

HttpSerlvetRequest.isSecure() è la risposta. Il ServletContainer è responsabile della restituzione di true nei seguenti casi:

  • Se il ServletContainer può accettare richieste su https.
  • Se c'è un LoadBalancer davanti a ServletContainer. E, LoadBlancer ha ricevuto la richiesta su https e ha inviato lo stesso al ServletContainer su semplice http. In questo caso, LoadBalancer invia X-SSL-Secure: true al server ServletContainer, che deve essere rispettato.

Il contenitore deve anche fare questa richiesta gli attributi disponibili quando la richiesta è pervenuta sulla https:

  • javax.servlet.http.sslsessionid
  • javax.servlet.request.key_size
  • javax.servlet.request.X509Certificate
+1

Puoi per favore condividere dove hai ottenuto X-SSL-Secure: true 'bit? Continuo a cercare e non riesco a trovare maggiori informazioni su questa intestazione. – Zotov

+0

Questo non funziona sul mio ambiente: Apache 2.4.10 come proxy anteriore; è impensabile sapere in java, anche se la richiesta è stata fatta con http o https ad apache. Certo, ho capito come http a Java, ma ho bisogno di sapere come è stato effettuato l'accesso al proxy frontale. - Effettivamente, come ha detto anche @Zotov: non ci sono quasi informazioni sull'intestazione X-SSL-Sercure.Quindi presumo che questo non sia ampiamente implementato ?! – badera

+0

Il nome dell'intestazione può essere diverso poiché non è molto standard. Ma il concetto qui è che i proxy possono aggiungere delle intestazioni su SSL e i server possono leggerle. Per Ex, Nginx aggiunge il protocollo X-SSL. Può anche essere sostituito con intestazione personalizzata. –

10

isSecure. Assicurati di controllare i metodi ereditati.

-3

https e http vengono eseguiti su porte diverse. Quindi puoi ottenere la porta dalla richiesta e sapere da quale porta è arrivata la richiesta e così puoi conoscere il protocollo. int port = request.getServerPort();

+4

@Krishnan numeri di porta sono arbitrari ... Posso eseguire HTTP su 44 3 e HTTPS su 80 o qualsiasi combinazione di questi. – hd1

23

Non è possibile dipendere in modo affidabile dai numeri di porta.
Ma si può dipendere il regime:

Usa: request.getScheme() per vedere se è https.

Se è quindi è la connessione sicura.

Credo che questo dovrebbe funzionare indipendentemente dalla versione di Tomcat

+1

isSecure torna almeno a [1.2] (http://download.oracle.com/javaee/1.2.1/api/javax/servlet/ServletRequest.html#isSecure%28%29) e non è specifico di Tomcat . –