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.
InformationsquelleAutor Phil | 2014-01-31
Schreibe einen Kommentar