Wie man den Namen des Servers in eine Java-Web-Anwendung
Ich habe eine Web-Anwendung, die Benutzer bereitstellen, die auf Ihre eigenen Java-Web-Server (z.B. Tomcat). Der Java-Seite der Web-Anwendung benötigt werden, melden Sie die URL der Web-Anwendung selbst (z.B. http://aServer.com:8080/MyApp oder https://blah.blahSever/MyApp). Da jedoch eine Anzahl von Benutzern die Verwendung von port-Weiterleitung und andere Netzwerk-Techniken, die eine Web-Anwendung, die berichten, dass der falsche name.
Ich habe versucht, die folgenden Techniken können aber oft nicht tatsächlich produzieren, was der Benutzer benötigt.
Beachten (Anfrage ist ein HttpServletRequest)
request.getLocalAddr(); //Returns: 127.0.0.1
request.getLocalName(); //Returns: localhost
request.getServerName(); //Returns: localhost
request.getServerPort(); //Returns: 8080
request.getContextPath(); //Returns: /MyApp
request.getScheme(); //Returns: http
InetAddress.getLocalHost().getHostName(); //Returns: serverXXX-XXX-XXX-XX.xxxx-xxxxxxx.net
InetAddress.getLocalHost().getHostAddress(); //Returns: xxx.xxx.xxx.xxx (ip address)
InetAddress.getLocalHost().getCanonicalHostName(); //Returns: serverXXX-XXX-XXX-XX.xxxx-xxxxxxx.net
Den Einsatz von InetAddress nahe kommt, was ich will, aber da sind wir mit Server-Aliase und ProxyPass in unserer Apache2-server, der Wert von InetAddress-die tatsächlichen Werte von dem server und nicht als Alias.
Die einzige Technik, die ich denken kann, um diese, ist, dass der Benutzer eine Eigenschaft in eine properties-Datei, die die Web-Anwendung liest beim Start. Wenn die Eigenschaft festgelegt ist, wird dieser Wert verwendet, um wieder den vollen web-Anwendung Pfad (z.B. serverUrl = https://blah.blahServer/MyApp) . Diese Technik funktionieren würde, aber mehr beinhaltet die Bereitstellung der Arbeit für meine Kunden.
Hat jemand irgendwelche Ideen, wie ich erreichen kann, um eine elegantere Lösung?
Dank,
Phil
- Setzen Sie die Adresse in ein-system-Eigenschaft und verwenden. Wenn man es auf einem anderen server, ändern Sie die Eigenschaft. Machen die app Start verweigern, wenn die Eigenschaft nicht festgelegt ist.
- Haben Sie versucht
request.getRequestURL()
? - Genc - Leider getRequestUrl einfach zurückgibt: localhost:8080/MyApp - das ist schön und abgeschlossen (es schließt http und der port und der Web-App-name), aber leider "localhost" zurück !
- Ich denke, dass Ihr Ansatz ist vielleicht der, den ich gehen!
- Es ist definitiv die einfachste (und funktioniert gut, es sei denn, Sie wechseln oft von domain-Namen) Ansatz.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Überprüfen Sie die "host" - Anforderungs-header. Die meisten client hinzufügen, dass der header zur Angabe des host, die Sie versuchen zu Kontaktieren.
Dies ist der gleiche header verwendet wird VirtualHosts, es ist also ziemlich standard. Es ist auch obligatorisch in HTTP1.1 Anfragen.
In der Tat, man kann nicht den Wert rein von der server-Seite, da es möglich ist, dass der Benutzer definiert seine eigenen Hostnamen für Ihren server.
Wenn dein server hinter einem apache-reserve proxy, verwenden Sie die ProxyPreserveHost Richtlinie, um sicherzustellen, dass der Host-header intakt gehalten. Ich bin sicher, dass andere reverse proxies haben ähnliche Optionen.
host
- request-header, ist nicht sicher zu verwenden, wie es kann verändert werden, indem jemandDieser löste das Problem für mich:
ich glaube, dein problem ist nicht die java-api zum Zugriff auf die Werte, die Sie brauchen.
In tomcat zum Beispiel gibt es eine server.xml Datei mit ein paar Zeilen wie
wenn Sie ersetzen Sie localhost durch den Namen, den Sie möchten, wie "myhost.com" und der Rechner, auf dem tomcat läuft, kennt seine eigenen host-Namen, dann beim abrufen der url mit dem angegebenen Hostnamen , wird es zeigen den Namen, den Sie Fragen für
Hinsichtlich