2015-09-28 9 views
0

我這是在web.xml中定義爲網頁過濾URI的選擇是錯誤的

<filter-mapping> 
<filter-name>ABCFilter</filter-name> 
<url-pattern>/*</url-pattern> 
</filter-mapping> 

我登錄使用此過濾一些細節網頁過濾器。其中一個細節是網頁的URI。 當我通過index.html(或任何html頁面)時,記錄的URI不是該頁面的URI,而是該頁面上使用的圖像的URI。

例如,如果URI是「/index.html」;日誌文件中的URI是「images/banner.gif」。

當我將url-pattern指定爲「* .html」時,它正在計算正確的uri,但將url-pattern指定爲/ *,它會記錄錯誤的數據。

任何類型的輸入將不勝感激。

回答

1

/*涵蓋了所有請求。這包括對HTML頁面引用的靜態資源(如CSS/JS /圖像文件)的請求。您似乎並不知道網頁是以這種方式工作的。您似乎以某種方式期望所有必要的資源都以與網頁請求相同的響應方式提供。這是不正確的。 HTML不能這樣工作。

您需要修改過濾器的網址格式,使其只匹配感興趣的網址。例如,如果所有這些網址的常見模式是以.jsp結尾,那麼只需使用*.jsp作爲網址格式。

<url-pattern>*.jsp</url-pattern> 

請注意,您可以在一個單一的映射指定多個<url-pattern>條目。因此,下面的內容也是有效的:

<filter-mapping> 
    ... 
    <url-pattern>*.jsp</url-pattern> 
    <url-pattern>*.html</url-pattern> 
    <url-pattern>*.xhtml</url-pattern> 
</filter-mapping> 

如果沒有特定的常見模式,例如因爲您使用URL重寫去除擴展並且沒有常用文件夾,所以您應該將所有靜態資源(如CSS/JS /圖像文件)移動到常用文件夾中,例如, /resources/,然後在篩選器中添加一個檢查以從業務作業中排除該路徑。

<url-pattern>/*</url-pattern> 
String resourceURI = request.getContextPath() + "/resources/"; 
boolean resourceRequest = request.getRequestURI().startsWith(resourceURI); 

if (!resourceRequest) { 
    // Log request. 
} 

chain.doFilter(request, response); 

這是不可能的了 「排除」 URL模式添加到映射。