2010-09-10 187 views
7

如何將過濾器映射到URL的根目錄?我使用Tomcat 7.0.2並將應用程序部署爲ROOT.war。歡迎頁面是sign_in.xhtml。我希望在客戶端發送對網站根目錄(即僅限域名)的請求時或客戶端請求sign_in.xhtml時運行過濾器。這是我到目前爲止有:直接Servlet過濾器url映射

<filter> 
     <filter-name>My filter</filter-name> 
     <filter-class>com.myApp.myFilter</filter-class>   
    </filter> 
    <filter-mapping> 
     <filter-name>My filter</filter-name> 
     <url-pattern>/sign_in.xhtml</url-pattern> 
    </filter-mapping> 

請求sign_in.xhtml,成功地調用過濾器,但我不知道怎麼去根調用過濾器的請求。根據Servlet規範(3.0版)

<url-pattern>/</url-pattern> 

映射到默認的servlet和一個空字符串映射到根。下面是從規範的相關章節:

「空字符串(」「)中恰好映射到 應用程序上下文,即一個特殊的URL模式,形式http://host:port/ /在這種情況下,路徑信息的請求。是'/',servlet路徑和上下文路徑是 空字符串(「」)。「

但是,以下兩種url模式都會導致Tomcat拋出異常。

<url-pattern></url-pattern> 
<url-pattern>""</url-pattern> 

我真的很感激,如果有人可以對此有所瞭解。謝謝。

安德魯

回答

7

<url-pattern>/</url-pattern>應根請求工作。你試過了嗎?

如果您的意圖是更多地過濾所有請求,那麼你應該使用<url-pattern>/*</url-pattern>


更新:要排除一個又一個,我測試的/url-pattern在Tomcat的7(同時使用web.xml@WebFilter(urlPatterns={"/"})),它果然沒有工作。 /url-pattern然而在Tomcat 6(Servlet 2.5)和Glassfish v3(Servlet 3.0)上按預期工作。我懷疑是Tomcat 7中的一個bug,所以我已經報告了issue 49914這個。

+0

感謝您關注此BalusC。如果用戶需要更改密碼,我打算強制重定向。過濾器看起來是合適的解決方案。我想我必須等待7.0.3或想出不同的東西。有任何想法嗎? – 2010-09-10 21:09:59

+0

偵聽'/ *'的過濾器只在請求URI爲空時纔會採取行動。 – BalusC 2010-09-10 21:36:03

+0

我會給它一個解決方案,然後在Tomcat bug修復後更新url-patten。 – 2010-09-10 22:08:19