it-swarm.com.de

Root-Domain von Anfrage erhalten

Betrachten Sie die folgende URL als Beispiel. http://www.test1.example.com

Gibt es eine Methode, mit der ich "example.com" als Ausgabe erhalten kann. Ich weiß, dass es eine Methode servletrequest.getServerName() gibt. Ich erhalte die Ausgabe als test1.example.com

Jede Hilfe dankbar.

32
Ritesh

In HttpServletRequest können Sie mithilfe der folgenden Methoden einzelne Teile des URI abrufen. Sie können sie auch verwenden, um die URL Stück für Stück zu rekonstruieren (um das Debuggen oder andere Aufgaben zu erleichtern):

// Example: http://myhost:8080/people?lastname=Fox&age=30

String uri = request.getScheme() + "://" +   // "http" + "://
             request.getServerName() +       // "myhost"
             ":" + request.getServerPort() + // ":" + "8080"
             request.getRequestURI() +       // "/people"
            (request.getQueryString() != null ? "?" +
             request.getQueryString() : ""); // "?" + "lastname=Fox&age=30"

Also request.getServerName() ist der nächste Punkt, den wir benötigen.

Die "Root-Domain":

Für die "Stammdomäne" müssen Sie das von getServerName() zurückgegebene String durcharbeiten. Dies ist notwendig, da das Servlet nicht im Voraus wissen kann, was Sie als "Host" bezeichnen oder was nur eine Domain wie .com Ist (es könnte sich in Ihrem Netzwerk um eine Maschine mit dem Namen com handeln) - und nicht nur ein Suffix - wer weiß?).

Für das Muster, das Sie angegeben haben (ein Drittel + zweite Ebene + com/net), sollte das Folgende das bekommen, was Sie brauchen:

String domain = request.getServerName().replaceAll(".*\\.(?=.*\\.)", "");

Das Obige gibt die folgenden Ein-/Ausgänge:

www.test.com       -> test.com
test1.example.com  -> example.com
a.b.c.d.e.f.g.com  -> g.com
www.com            -> www.com
com                -> com
79
acdcjunior

Wir haben eine zuverlässigere Möglichkeit, dasselbe zu tun. Es gibt Google-Bibliothek "Guave". Füge folgende Abhängigkeit in deinen Pom ein.

<dependency>
     <groupId>com.google.guava</groupId>
     <artifactId>guava</artifactId>
     <version>19.0</version>
</dependency>

Dann versuche es

InternetDomainName.from("subdomain.example.co.in").topPrivateDomain().toString()

Dies gibt Ihnen "example.co.in"

16
Vaibhav

Sie können dies als einfache String-Manipulation ausführen:

String A = "http://www.test1.example.com";
String B = A.substring(A.lastIndexOf('.', A.lastIndexOf('.')-1) + 1);

Es gibt keine Standardmethode, um example.com Von a.b.c.example.com Zu erhalten, da eine solche Transformation im Allgemeinen nicht nützlich ist. Es gibt TLDs, die keine Registrierungen auf der zweiten Ebene zulassen. Zum Beispiel alle .uk - Domains . Mit news.bbc.co.uk Würden Sie gerne bbc.co.uk Erhalten, oder?

3
Joni