我想通過idlemonitor,primefaces組件處理會話超時。通過idlemonitor(primefaces)超時
我這樣做是因爲我需要讓用戶知道由於閒置會話已過期。我需要通過對話框顯示此消息,關閉對話框後,他應該重定向到登錄頁面。他不應該能夠點擊「返回」並瀏覽應用程序,就像什麼都沒有發生;如果他點擊「返回」,他應該被重定向到sessionexpired.xhtml頁面。
我把idleMonitor我loggedintemplate.xhtml,所以它只能如果您已經登錄,在什麼頁面,東陽我的所有網頁,您登錄後,從顯示LoggedInTemplate派生不管。 xhtml。
這是我loggedintemplate.xhtml代碼的樣子:
<p:idleMonitor timeout="6000" onidle="idleDialog.show()" />
<p:dialog header="Timeout" resizable="false" closable="false"
widgetVar="idleDialog" modal="true">
<p:panel styleClass="noborderpanel">
<p:panelGrid columns="1" styleClass="adressegrid">
<p:outputLabel value="Session has expired due to inactivity" />
<p:commandButton action="#{loginController.timeout()}"
value="Ok" />
</p:panelGrid>
</p:panel>
</p:dialog>
所以這個代碼的功能基本上檢查,如果用戶不活躍,持續6秒,如果他是無效的,彈出一個不可關閉的對話框並告訴他該會話已過期。
的方法loginController.timeout()應註銷用戶,無效的會話等
我的問題是,我不知道如何會話無效,如何註銷用戶等如果我使用FacesContext.getCurrentInstance().getExternalContext() .invalidateSession();
它會使會話無效,但我需要更多。例如,如果用戶處於非活動狀態超過30分鐘,默認的JavaEE超時時間,我會得到一個nullPointerException。
我想處理超時「手動」,有沒有辦法來禁用默認的JavaEE超時?
什麼是手動處理超時的最佳方式,而不是像這樣:
<session-config>
<session-timeout>20</session-timeout>
</session-config>
<error-page>
<exception-type>javax.faces.application.ViewExpiredException</exception-type>
<location>/expired.xhtml</location>
</error-page>
我想如果你那句你的問題更具體你可以提高你的答案的機會。我不知道是否可以在web.xml中全部禁用會話超時。您可以將其設置爲8小時,然後以您已經這樣做的方式自行使會話失效。那麼NPE只需檢查一下。我們完全按照這種方式使用它(使用primefaces idlemonitor)。 – Jens 2013-03-20 22:16:09
我不明白你的意思是「檢查這個」? – leostiw 2013-03-21 07:34:55
您何時何地獲得NPE?這些'FacesContext.getCurrentInstance()。getExternalContext()。invalidateSession();'是'null'和什麼時間? (檢查這是否意味着:包括像if(objectThatCouldBeNull!= null)這樣的檢查 – Jens 2013-03-21 07:57:35