Comment obtenir l’URI de la requête d’origine dans la page de démarrage à ressort d’EL derrière httpd proxypass

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.