web-dev-qa-db-fra.com

request.getScheme () renvoie http au lieu de https en java

function demo(request,response){
        request.getScheme() is returning http instead of returning https.
        System.out.println(""+request.getScheme());
}

sortie: http

--La ​​démo de fonction ci-dessus est appelée depuis la méthode principale, mais elle affiche http à la place, elle devrait imprimer https lors d'un travail sur un serveur Internet.

10
Sumit

Voir la réponse https://stackoverflow.com/a/19599143/1524502 ​​ , et notez les problèmes liés au fait d'être derrière un proxy inverse ou un équilibreur de charge. Très probablement, c'est votre problème.

Le répondant à cette question a recommandé d'utiliser

request.getHeader("x-forwarded-proto")

à la place, cela dépend toutefois de l’équilibrage de l’en-tête correctement défini par l’équilibreur de charge.

6
jonnybot

Si votre serveur fonctionne derrière un serveur proxy, assurez-vous que votre en-tête de proxy est défini:

proxy_set_header X-Forwarded-Proto  $scheme;

Ensuite, pour obtenir la bonne scheme, vous pouvez utiliser les classes de springframework:

HttpRequest httpRequest = new ServletServerHttpRequest(request); //request is HttpServletRequest
UriComponents uriComponents = UriComponentsBuilder.fromHttpRequest(httpRequest).build();

String scheme = uriComponents.getScheme(); // http/https
2
Mamun Sardar

J'avais un problème similaire avec getScheme ()

String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";

J'ai résolu en utilisant "//" à la place:

String basePath = "//"+request.getServerName()+":"+request.getServerPort()+path+"/";
1
Diego