Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/401.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在jetty中使用主机名而不是IP?_Java_Jetty - Fatal编程技术网

Java 如何在jetty中使用主机名而不是IP?

Java 如何在jetty中使用主机名而不是IP?,java,jetty,Java,Jetty,我正在使用in jetty来限制对来自特定域的请求的访问。然而,我确实遇到了两个问题: 1-似乎IPAccessHandler只接受白名单或黑名单的IP,尽管据说可以通过URL进行阻止。这是my jetty-ipaccess.XML的一个XML片段: <Set name="black"> <Array type="String"> <Item>google.com</Item> </Array> &l

我正在使用in jetty来限制对来自特定域的请求的访问。然而,我确实遇到了两个问题:

1-似乎
IPAccessHandler
只接受白名单或黑名单的IP,尽管据说可以通过URL进行阻止。这是my jetty-ipaccess.XML的一个XML片段:

  <Set name="black">
    <Array type="String">
      <Item>google.com</Item>
    </Array>
  </Set>
但是如果我使用IP地址(例如
127.0.0.1
),那么jetty就可以正常启动

2-现在假设我通过阻止来自IP
127.0.0.1
的访问启动jetty,那么如果我尝试在浏览器中请求
127.0.0.1
,我会得到正确的禁止错误。如果我尝试请求
http://localhost
,则我得到以下错误:

HTTP ERROR: 500

Problem accessing /. Reason:

    java.lang.IllegalArgumentException: Invalid IP address: 0:0:0:0:0:0:0:1

到目前为止,我已经试了两天了,一点运气都没有!非常感谢您的帮助

IPAccessHandler仅使用IP地址,因此得名

IPAccessHandler
端的配置或传入请求端的验证中使用主机名是非常低效的(也是错误的)

让我们使用这个java代码来探索我的意思

包网;
导入java.net.InetAddress;
导入java.net.UnknownHostException;
公共类多DNS
{
公共静态void main(字符串[]args)
{
尝试
{
字符串hostname=“www.google.com”;
System.out.printf(“主机名:%s%n”,主机名);
for(InetAddress地址:InetAddress.getAllByName(主机名))
{
System.out.printf(“-%s[%s]%n”,addr.getHostAddress(),InetAddress.getByAddress(addr.getAddress()).getHostName());
}
}
捕获(未知后异常e)
{
e、 printStackTrace();
}
}
}
我对
google.com
的查询结果如下所示

Hostname:www.google.com
-74.125.25.106[pa-in-f106.1e100.net]
-74.125.25.99[pa-in-f99.1e100.net]
-74.125.25.104[pa-in-f104.1e100.net]
-74.125.25.147[pa-in-f147.1e100.net]
-74.125.25.105[pa-in-f105.1e100.net]
-74.125.25.103[pa-in-f103.1e100.net]
-2607:f8b0:400e:c00:0:0:0:67[pf-in-x67.1e100.net]
由于我住在亚利桑那州,我得到了上述结果,但如果你住在欧洲或亚洲(作为例子),你会得到不同的结果

你今天看到的结果,以后可能会有所不同

此外,当您将查询返回的IP返回到google.com时,您将看到您无法从这些IP解析回google.com(这些IP返回搜索结果)

在任何意义上,使用主机名进行访问控制都是有意义的,主机名和IP之间没有1::1关系

即使您将主机名添加到配置端,您也需要在每个请求上查询该主机名的IP,以了解传入请求的IP现在是允许还是拒绝。这是一项成本太高的活动,无法执行

您可能认为Jetty可以使用dns请求的ttl/过期来限制它对该域执行dns查询的次数。遗憾的是,Java无法访问dns响应的ttl信息

HTTP ERROR: 500

Problem accessing /. Reason:

    java.lang.IllegalArgumentException: Invalid IP address: 0:0:0:0:0:0:0:1