JSF 2.0でフィルタを使用してセッションの有効期限を処理しています。ここでは、コードセッション終了時にユーザーをタイムアウトページに移動する方法、ユーザーがブラウザの戻るボタンをクリックした場合
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain)
throws IOException, ServletException {
HttpServletRequest httpServletRequest = (HttpServletRequest) request;
HttpServletResponse httpServletResponse = (HttpServletResponse) response;
HttpSession session = httpServletRequest.getSession(false);
if (session == null) {
//session timeout check.
if (httpServletRequest.getRequestedSessionId() != null && !httpServletRequest.isRequestedSessionIdValid()) {
System.out.println("Session has expired");
session = httpServletRequest.getSession(true);
session.setAttribute("logedin", "0"); // public user
httpServletResponse.sendRedirect(timeoutPage);
} else {
session = httpServletRequest.getSession(true);
session.setAttribute("logedin", "0");
filterChain.doFilter(httpServletRequest, httpServletResponse);
}
}
} //end of doFilter()
はある。しかし、セッションの有効期限が切れたときに問題があると、ユーザーが[戻る]ボタンをクリックした場合、その後、彼はすべてのアウトスタイルでページを取得します。とにかくセッションが終了し、ユーザーがブラウザの戻るボタンをクリックすると、彼はtimeoutPageに指示します。
さらに、私は、datatableのように私のページにPrime Facesコンポーネントも使用しています。私は改ページを使用しています。セッションがタイムアウトすると、ページネーションをクリックするとセッションの有効期限のメッセージが表示されません。それは、AJAXのリクエストはフィルタを呼び出さないようですか?どうすれば私のajaxイベントに接続できますか、またはdatatableページネーションイベントをセッションの有効期限まで言うことができますか?
おかげ
HHmmので、 '..httpServletResponse.setHeader(" Pragma "、" no-cache "); ..'これはブラウザの戻るボタンを押すとコンストラクタが呼び出されることを意味します。 'no-cache'を設定しないと、ブラウザの戻るボタンを押すと、コンストラクタは呼び出されず、ブラウザはキャッシュを使ってページを表示します。私は正しい? – Basit
Beanがリクエスト/ビュースコープの場合は正しいです。ブラウザは、ブラウザキャッシュから古いページを表示するのではなく、サーバーに完全なHTTPリクエストを送信します(フィルタで必要なチェックをすべて実行できます)。 – BalusC
あなたはajaxの部分を定義したように、もう一つ重要なことです。ページングをクリックしたときに、フィルタがセッションの有効期限が切れているが、HTTPステータス302の応答が原因でリダイレクト要求が無視されていると言うことになります。それは...ですか? – Basit