2013-03-25 45 views
8

使用Tomcat 7面對--- Primefaces 3.4.1 ---使用javax面臨2.1.17 --- prettyfaces-JSF2 3.3.3使用相當與網絡過濾器

我在我的項目配置正確漂亮的面孔,但是我網頁過濾器不適用於用漂亮的臉孔寫的新網址。

這裏有一個例子很-config.xml中

<url-mapping id="home"> 
    <pattern value="/home"/> 
    <view-id value="/secure/homepage.xhtml"/> 
</url-mapping> 

<url-mapping id="register"> 
    <pattern value="/register"/> 
    <view-id value="/public/register.xhtml"/> 
</url-mapping> 

<url-mapping id="welcome"> 
    <pattern value="/"/> 
    <view-id value="/public/welcome.xhtml"/> 
</url-mapping> 

<url-mapping id="profile"> 
    <pattern value="/profile/#{userId}"/> 
    <view-id value="/profile.xhtml"/> 
</url-mapping> 

登錄(歡迎)和註冊頁面中的「公共」文件夾,其網絡過濾器與註釋中定義的:@WebFilter(「/公/ *「)

在我的主頁‘安全’文件夾(正好會有文件夾中的多個頁面),我定義了一個Web過濾器也和它的註解:@WebFilter(」 /安全/ *)

漂亮的網址正在正常工作,但這些過濾器只在我編寫原始網址時才起作用。

1)我該如何修復我的web過濾器?

2)我也想阻止用戶輸入原始網址。我知道漂亮的臉龐完全隱藏了原有的網址,但有沒有辦法做到這一點?

- 解決 - 爲BalusC

,如果你有註解定義你的過濾器的感謝,您可以配置像

@WebFilter調度員設置(URL模式= 「/公/ *」,dispatcherTypes = {DispatcherType.REQUEST,DispatcherType.FORWARD}

回答

11

PrettyFaces使用像許多URL重寫解決方案RequestDispatcher#forward()轉發請求到所需的目標資源。

當沒有任何<dispatcher>映射時,Servlet過濾器默認偵聽「初始」請求,而不是轉發,包含或錯誤請求。

所以,當你在PrettyFaces之一,那麼它會默認web.xml映射另一個Servlet過濾器不會被觸發,除非您已明確設定<dispatcher>FORWARD旁邊REQUEST默認的(你應該保持這個對於PrettyFaces實際上並不需要執行前進的情況)。

<filter-mapping> 
    ... 
    <dispatcher>REQUEST</dispatcher> 
    <dispatcher>FORWARD</dispatcher> 
</filter-mapping> 

或者,你使用你的過濾器@WebFilter的情況下,使用dispatcherTypes屬性:

@WebFilter(..., dispatcherTypes = { REQUEST, FORWARD }) 

或者,如果有問題的過濾器不更改請求/響應目標任何方式,例如設置字符集,使用Gzip進行壓縮,監聽異常等,然後您可以在PrettyFaces之前將放在之前。

+0

我沒有在我的web.xml,BalusC中指定任何過濾器。因爲我使用version =「3.0」,漂亮的是將自己自動配置爲寫入文檔。此外,我的網頁過濾器清晰地定義了註釋。我是否需要直接在web.xml上爲調度程序設置定義它? – oko 2013-03-25 01:27:56

+0

只需使用'@WebFilter(dispatcherTypes)'。查看更新的答案。 – BalusC 2013-03-25 01:28:46

+0

謝謝@BalusC,它工作得很好。 @WebFilter(URL模式= 「/公/ *」,dispatcherTypes = {DispatcherType.REQUEST,DispatcherType.FORWARD}) 解決我的問題。但我想問一個小問題,更新或刷新同一頁面(例如使用primefaces輪詢),它總是被過濾器捕獲並且其實際上完全正常。但有沒有辦法逃避它? – oko 2013-03-25 01:39:54