2012-04-19 3 views
0

ユーザーがログインしているかどうかをチェックしてから前のページをキャッシュしないようにするフィルターを使用しています。このためのコードは、似ているボタンやリンクのクリックでページが期限切れにならないようにする方法。ページ上の任意のボタンのクリックまたはリンクに対してヌルを返すとページが終了する

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

+0

... :)基本概念はどういう意味ですか?その基本的な概念について教えていただけますか?はい、あなたは正しいです。実際には私は章からそれを読んでいます。しかしそれはサーブレットとJSPのためのものでした。そして今私はJSFを使用しています。明らかにセッショントラッキングは同じですが、私はコンセプトがありません。 – Basit

答えて

0

エンドユーザーがブラウザにキャッシュされていないPOST要求を再送信しようとすると、これは正常で特定の動作です。ポストリダイレクト取得パターンを実装する必要があります。アクションメソッドの宛先ページにリダイレクトを送信します。または、それをAjaxにしてください。これは、同じビューに戻るかどうかにかかわらず、nullを返すかどうかにかかわらずです。

+0

**どのように私は** post-redirect-getパターン**を実装できますか?したがって、私のアクションがnullを返した場合、ページは期限切れではありません。はい、私は同じ意見に戻ります。私はページfaq.xhtmlを持っているとしましょう。だから私は検証のためにチェックし、検証が失敗した場合、私はnullを返します。 – Basit

+0

HHmm nullを返す代わりに、ユーザーをリダイレクトすると言ってもいいですか? 'return null'を使う代わりに、この' return 'MyDashboard?faces-redirect = true "'のようなものを使うべきです。それは...ですか?それは同じページにリダイレクトされます.. – Basit

+0

ありがとう。はい、あなたは正しいです。 nullを返す代わりに、私はこのようなものを使用しました 'return null; return "NewsAndAnnouncementAddUpdate?faces-redirect = true"; "つまり、同じページにリダイレクトします。今度は、戻るボタンをクリックすると、pageExpiresメッセージは消えます。ありがとう:) – Basit

関連する問題