Comment obtenir le nom d'hôte avec le port à partir d'une requête http ou https
J'ai deux applications déployées dans le conteneur jboss(même sous unix). Si je reçois une demande de app1, j'ai besoin de formuler une demande d'app2.
par exemple:
si app1 demande est: http://example.com/context?param1=123
puis-je extraire "http://example.com/", afin que je puisse le cadre de la demande pour la deuxième application.
J'ai essayé d'utiliser:
HttpServletRequest.getServerName() &
HttpServletRequest.getServerPort() & \
HttpServletRequest.getHeader("host")
méthodes, mais la demande peut être de l'http ou https.
S'il vous plaît laissez-moi savoir si il y a de mieux.
Merci!
source d'informationauteur kumar
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser
HttpServletRequest.getScheme()
pour récupérer "http" ou "https".De l'utiliser avec
HttpServletRequest.getServerName()
devrait être suffisant pour reconstruire la partie de l'URL que vous avez besoin.Vous n'avez pas besoin explicitement mis le port dans l'URL si vous êtes en utilisant le standard (80 pour http et 443 pour https).
Modifier: Si votre conteneur de servlet est derrière un proxy inverse ou d'équilibrage de charge qui se termine le SSL, c'est un peu plus compliqué parce que les demandes sont transmises à l'conteneur de servlet au format http. Vous avez plusieurs options:
1) Utilisation
HttpServletRequest.getHeader("x-forwarded-proto")
; ce qui ne fonctionne que si votre équilibreur de charge définit l'en-tête correctement (Apache doit autant que je sache).2) Configurer un RemoteIpValve dans JBoss/Tomcat qui fera
getScheme()
fonctionner comme prévu. Encore une fois, cela ne fonctionne que si l'équilibrage de charge fixe la bonne têtes de.3) Si le ci-dessus ne fonctionnent pas, vous pouvez configurer les deux connecteurs différents dans Tomcat/JBoss, une pour http et une pour https, comme décrit dans cet article.
Vous pouvez utiliser HttpServletRequest.getRequestURL et HttpServletRequest.getRequestURI.
Si vous utilisez le programme d'équilibrage de charge & Nginx, config sans modifier le code.
Nginx:
De Tomcat server.xml Moteur:
Si seulement modifier le fichier de configuration de Nginx, le code java doit être:
Si vous voulez que l'URL d'origine suffit d'utiliser la méthode décrite par jthalborn.
Si vous souhaitez reconstruire l'url de faire comme David Levesque a expliqué, voici un extrait de code pour:
Vous avez encore besoin de considérer le cas d'un reverse-proxy:
Pourrait utiliser des constantes pour les ports, mais vous ne savez pas si il y a une source fiable pour eux, ports par défaut:
La plupart des développeurs sauront le port 80 et 443 de toute façon, donc les constantes ne sont pas utiles.
Aussi le voir, semblable post.
Reportez-vous à http://docs.oracle.com/javase/tutorial/networking/urls/urlInfo.html . C'est la plus concise de la couverture sur l'analyse d'url.
Si votre serveur est en cours d'exécution derrière un serveur proxy, assurez-vous que votre proxy en-tête est défini:
Ensuite pour obtenir le droit
scheme & url
vous pouvez utiliser springframework de classes: