从请求中获取根域

2022-09-01 01:43:44

以下面的 URL 为例。http://www.test1.example.com

有没有办法让我得到“example.com”作为输出。我知道有一种方法。它为我输出 test1.example.comservletrequest.getServerName()

任何帮助赞赏。


答案 1

HttpServletRequest 中,您可以使用以下方法获取 URI 的各个部分。您还可以使用它们逐个重建URL(以帮助调试或其他任务),如下所示:

// 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"

所以 request.getServerName() 是我们最接近你需要的。

“根域”:

对于“根域”,您必须通过 返回的 。这是必要的,因为Servlet无法提前知道你所谓的“host”或什么只是一个域(它可能是你的网络中调用的机器 - 而不仅仅是一个后缀 - 谁知道呢?)。StringgetServerName().comcom

对于您给出的模式(三分之一+二级+com/net),以下应该得到您需要的:

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

以上将给出以下输入/输出:

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

答案 2

我们有更可靠的方法来做同样的事情。有谷歌图书馆“番石榴”。在 pom 中添加以下依赖项。

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

然后尝试

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

这将给你"example.co.in"


推荐