J’ai une application web à démarrage par ressort avec tomcat intégré, exécutée sur le port 28081, et httpd configuré pour le proxy comme ceci:
ProxyPass / http://localhost:28081/ ProxyPassReverse / http://localhost:28081/
Ensuite, dans une page jsp, je dois transmettre l’URL de demande complète à un widget silverlight, mais
${pageContext.request.serverName}:${pageContext.request.serverPort}
se résoudra à http://localhost:28081
.
J’ai donc pensé utiliser X-Forwarded-Host
, mais il existe des cas où il contient plusieurs adresses proxy, séparées par des virgules. Je ne suis pas sûr que l’on puisse faire confiance à l’ordre des adresses qui sera préservé.
Y a-t-il un meilleur moyen de le faire, que ce soit dans le jsp, dans la configuration httpd ou dans le code du contrôleur?
Dans le contrôleur, vous pouvez utiliser ServletUriComponentsBuilder
: initialisez-le à partir de la requête et il sélectionne les en-têtes de proxy et construit l’URI pour l’origine, par exemple Ssortingng uri = ServletUriComponentsBuilder.fromCurrentRequest().build().toSsortingng()
.
Vous pouvez utiliser ProxyPreserveHost
dans votre configuration httpd pour conserver l’en-tête Host
original, c’est-à-dire votre nom de domaine sortant, mais je ne peux pas penser à un bon moyen de passer le port.