2012-04-19 102 views
0

我正在使用過濾器檢查用戶是否登錄,然後不緩存上一頁。造成這種情況的代碼是什麼樣子,如何避免按鈕或鏈接點擊頁面過期。當我爲表單上的任何按鈕單擊或鏈接返回null時頁面過期

public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) 
     throws IOException, ServletException { 
    .... 
    if (isRegisteredUser.equalsIgnoreCase(("1"))) { 

     sessionID = UUID.randomUUID().toString(); 

     session.setMaxInactiveInterval(1800); 

     Cookie userCookie = new Cookie("userCookie", "loginUser"); 
     userCookie.setPath("/"); 
     httpServletResponse.addCookie(userCookie); 

     Cookie sessionCookie = new Cookie("WITSessionCookie", sessionID); 
     sessionCookie.setMaxAge(60*30); 
     sessionCookie.setPath("/");  
     httpServletResponse.addCookie(sessionCookie); 

     if (!httpServletRequest.getRequestURI().startsWith(httpServletRequest.getContextPath() + ResourceHandler.RESOURCE_IDENTIFIER)) { // Skip JSF resources (CSS/JS/Images/etc) 
      httpServletResponse.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); // HTTP 1.1. 
      httpServletResponse.setHeader("Pragma", "no-cache"); // HTTP 1.0. 
      httpServletResponse.setDateHeader("Expires", 0); // Proxies. 
     } 

     filterChain.doFilter(httpServletRequest, httpServletResponse); 

    } 
    ... 

} //end of doFilter() 

但問題是,如果對任何按鈕或鏈接任何網頁的用戶點擊,我的那個動作返回null,然後我點擊瀏覽器的後退按鈕,然後將其說頁面過期。 我該如何預防?這很好,該頁面沒有緩存,但爲什麼當我點擊任何按鈕或任何鏈接並返回null時,它會到期我的頁面?
感謝

+1

您的會話和cookie處理方式很奇怪。你似乎很想念一些基本概念。 – BalusC 2012-04-19 12:00:08

+0

... :)你是什麼意思的基本概念?你能告訴我關於這些基本概念嗎?你是對的。其實我只是從章節中讀到它。但那是針對servlet和JSP的。現在我正在使用JSF。顯然會話跟蹤是一樣的,但是我缺乏概念.. – Basit 2012-04-19 12:52:19

回答

0

這是正常的,指定的行爲,當終端用戶嘗試重新發送未在瀏覽器中緩存的POST請求。您需要實現重定向後獲取模式。在操作方法中發送重定向到目標頁面。或者,更好的做法是將它改爲ajax提交。順便說一句,無論您是否返回null而返回相同視圖。

+0

我該如何實現**後重定向 - 獲取模式**?因此,如果我的操作返回null,那麼該頁面不會過期。是的,我回到了相同的觀點。假設我有頁面faq.xhtml。所以我檢查驗證,如果任何驗證失敗,那麼我返回null。 – Basit 2012-04-19 12:53:06

+0

HHmm你的意思是說,而不是返回null,我重定向用戶。就像使用'return null'一樣,我應該使用像這樣的'return'MyDashboard?faces-redirect = true「'。是嗎?這是重定向到相同的頁面。 – Basit 2012-04-19 12:58:56

+0

謝謝。你是對的。而不是返回null,我用這樣的'/ /返回null;返回「NewsAndAnnouncementAddUpdate?faces-redirect = true」;'即重定向到同一頁面。現在,當我點擊後退按鈕時,pageExpires消息消失了。謝謝 :) – Basit 2012-04-19 13:41:44

相關問題