簡體   English   中英

在JSF和Richfaces中處理過期的ViewState

[英]Handling an expired ViewState in JSF and Richfaces

我有一系列相互建立的注冊頁面。 當用戶會話到期時,我有一個監聽器,可以清理服務器上的所有內容並且運行良好。 但是,如果用戶嘗試做任何其他事情,我只想將它們重定向回系列的第一頁。 但是,我的過濾器似乎無法正常工作。 我一直得到javax.faces.application.ViewExpiredException

處理此次泄露的最佳做法是什么? 我不能真正處理web.xml,因為它太全局了。 另外,Error頁面是從一些JSF代碼呈現的 - 似乎我需要捕獲這是發生在使用PhaseListener,所以異常不會發生在第一位,但我找不到一個好的模型如何做到這一點。 有任何想法嗎?

Richfaces有自己的處理ViewExpiredException的機制,請看Richfaces文檔

我認為你是一個具有階段監聽器的正確軌道。 基本上在第一頁的會話中設置一些內容。 然后在階段監聽器中查找會話中的值。 如果它沒有退出,則執行重定向。 訣竅是在階段監聽器流程中盡早完成。 不確定您的階段偵聽器正在拋出異常的過程中的確切位置。

我處理這個的方法是在web.xml中添加一個過濾器,只映射到你想要跟蹤的url。 該過濾器檢查會話是否過期,然后轉發到登錄頁面(如果是)。 如果在運行任何JSF代碼之前運行過濾器,它應該可以工作。

我過去處理這個問題的方法是使用一個偵聽器來檢查托管會話bean中的字段。 如果用戶會話超時,則偵聽器清除mbean並將用戶標記為未登錄。每個請求都通過偵聽器發送,如果不滿足要求,則用戶被強制退出站點。 我從來沒有在我的日志中獲得ViewExpiredException。 此異常發生的唯一時間是服務器是否已重新啟動,並且用戶在具有上一個活動會話時請求頁面。

您可以檢查會話是否無效

boolean sessionInValid = httpServletRequest.getRequestedSessionId()!= null &&!httpServletRequest.isRequestedSessionIdValid();

如果會話通過任何方式無效,則布爾變量sessionInValid將返回true。

您可以在過濾器或偵聽器中添加它,然后在web.xml文件中進行配置。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM