2016-01-24 72 views
0

我在碼頭使用IPAcccessHandler來限制對來自特定域的請求的訪問。然而,我真的堅持兩個問題:如何在碼頭使用主機名而不是IP?

1-似乎IPAccessHandler只接受IP到白名單或黑名單,雖然它是Javadocs說,可以阻止URL。這是我的碼頭,ipaccess.xml的XML片段:

<Set name="black"> 
    <Array type="String"> 
     <Item>google.com</Item> 
    </Array> 
    </Set> 

現在,如果我跑碼頭我得到下面的異常(即碼頭無法啓動):

Caused by: java.lang.IllegalArgumentException: Invalid IP address pattern: google.com 

但是,如果我使用IP地址(例如127.0.0.1),然後碼頭開始罰款。

2-現在說我通過阻止訪問IP 127.0.0.1開始碼頭,那麼如果我嘗試在我的瀏覽器中請求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 

我一直試圖兩天到目前爲止沒有任何的運氣!任何幫助深表感謝!

回答

0

IPAccessHandler只使用IP地址,因此它的名稱。

使用使用主機名作爲IPAccessHandler端的配置或傳入請求端的驗證將會非常低效(和錯誤)。

讓我們用這個java代碼來探索我的意思。

package net; 

import java.net.InetAddress; 
import java.net.UnknownHostException; 

public class MultiDns 
{ 
    public static void main(String[] args) 
    { 
     try 
     { 
      String hostname = "www.google.com"; 
      System.out.printf("Hostname: %s%n",hostname); 
      for (InetAddress addr : InetAddress.getAllByName(hostname)) 
      { 
       System.out.printf(" - %s [%s]%n",addr.getHostAddress(),InetAddress.getByAddress(addr.getAddress()).getHostName()); 
      } 
     } 
     catch (UnknownHostException 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(它們返回的結果爲1e100.net addresses)。

在使用主機名進行訪問控制的意義上,主機名與IP之間不存在1 :: 1關係。

即使你添加主機名配置方面,你需要查詢該主機名它對每一個請求 IPS 知道,如果傳入的請求的IP是現在允許或拒絕。這對於要執行的活動而言成本太高。

您可能會認爲Jetty只能使用dns請求的ttl/expiration來限制它爲該域執行dns查詢的次數。唉,Java不能訪問dns響應的ttl信息。

相關問題